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

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

自定义控件的代码如下:

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,那么又会有如下效果:

图片描述

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

阅读 3.6k
1 个回答

你试下用surfaceview实现

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题