小编Dan*_*ele的帖子

将硬件加速的android画布保存为位图

我目前正在直接绘制提供给我的视图的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)

android canvas view bitmap hardware-acceleration

7
推荐指数
0
解决办法
845
查看次数

标签 统计

android ×1

bitmap ×1

canvas ×1

hardware-acceleration ×1

view ×1