核心部分是向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
多大,触摸都可以始终保持平滑。
我想知道在drawPath
和anyDensity="true"
之间呈现anyDensity="false"
有什么不同。由于anyDensity="false"
会使应用看起来很奇怪,有没有办法达到相同的平滑效果并将anyDensity
设置为true
。