我目前正在直接绘制提供给我的视图的onDraw方法的Canvas对象.这个画布是硬件加速的.特别是,我使用RadialGradient着色器和OVERLAY PorterDuff模式绘制多个圆圈.但是,当我尝试将相同的绘制过程应用于我手动创建的画布时,我得不到相同的结果.我相信这是因为为位图创建的canvas对象不是硬件加速的.
对于视图,代码看起来像这样:
public class MyView extends View {
private Paint mPaint;
private List<Shader> mShaders;
public MyView(Context context) {
super(context);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.DITHER_FLAG);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.OVERLAY));
mShaders = new ArrayList<Shader>(); // assume x, y, r, and color vals are defined.
mShaders.add(new RadialGradient(x1, y1, r1, c11, c12, Shader.TileMode.CLAMP));
mShaders.add(new RadialGradient(x2, y2, r2, c21, c22, Shader.TileMode.CLAMP));
}
@Override
protected void onDraw(Canvas canvas) {
mPaint.setShader(mShaders.get(0));
canvas.drawCircle(x1, y1, r1, mPaint);
mPaint.setShader(mShaders.get(1));
canvas.drawCircle(x2, y2, r2, mPaint);
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很顺利.圆圈在硬件加速画布上按预期绘制.
但是,如果我这样做:
...
Bitmap bitmap = Bitmap.createBitmap(w, …Run Code Online (Sandbox Code Playgroud)