为什么'anyDensity'对渲染drawPath()的性能有影响?

时间:2017-12-29 07:09:31

标签: android view draw

核心部分是向Path对象添加200个点并在此之后调用drawPath(),非常简单:

private Path mPath = new Path();
private Paint mPaint = null;
@Override
protected void onDraw(Canvas canvas) {
    if (mPoints.size() == 0) {
        generatePoints();
    }

    if (mPaint == null) {
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeWidth(5);
        mPaint.setColor(Color.RED);
    }

    mPath.rewind();

    for (int i = 0; i < mPoints.size(); i++) {
        int x = (int) ((int) (mPoints.get(i).x * mScale) + mOffsetX);
        int y = (int) ((int) (mPoints.get(i).y * mScale) + mOffsetY);
        if (i == 0) {
            mPath.moveTo(x, y);
        } else {
            mPath.lineTo(x, y);
        }
    }

    canvas.drawPath(mPath, mPaint);

    super.onDraw(canvas);
}

我使用mScale来控制尺寸,mOffsetX mOffsetY来移动线条。当mScale较小时,所有线条都在屏幕上可见,我可以平滑地移动它,而当mScale增加时会出现断断续续的情况,其中大量的线条在屏幕。

奇怪的是,如果我在Manifest.xml中将anyDensity更改为false,那么无论我设置的mScale多大,触摸都可以始终保持平滑。

我想知道在drawPathanyDensity="true"之间呈现anyDensity="false"有什么不同。由于anyDensity="false"会使应用看起来很奇怪,有没有办法达到相同的平滑效果并将anyDensity设置为true

0 个答案:

没有答案