硬件加速造成的自定义控件显示问题

发布于 2022-09-05 10:54:46 字数 1697 浏览 24 评论 0

我也了一个控件,功能仅仅是在这个控件里画线,但是当开启硬件加速和关闭硬件加速的时候在屏幕上的显示效果很不一样。

自定义控件的代码如下:

public class CustomView extends View {

    private Paint paint;
    private Path path;

    public CustomView(Context context) {
        this(context, null);
    }

    public CustomView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomView);

        if(ta.getBoolean(R.styleable.CustomView_noHardware, false)){
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
        ta.recycle();

        path = new Path();
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setStrokeWidth(0.2F);
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        for(int index = 0; index < canvas.getHeight(); index += 20) {
            path.reset();
            path.moveTo(0, index);
            path.lineTo(canvas.getWidth(), index);
            canvas.drawPath(path, paint);
        }
    }
}

我在一个界面上放了两个这个控件,但是其现实效果不一样,如下显示:

图片描述

大家可以看不到上面也有一个这样的控件,但是确实是有的,只是上面是默认的(硬件加速开的),而下面则是我把硬件加速关了的效果。

如果我把笔画的宽度该成0.3,那么又会有如下效果:

图片描述

为什么硬件加速会造成这样的差别呢?
写自定义控件的时候需要如何处理硬件加速呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

固执像三岁 2022-09-12 10:54:46

你试下用surfaceview实现

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文