【问题标题】:Drawing Canvas on an ImageView / Bitmap在 ImageView / Bitmap 上绘制画布
【发布时间】:2015-12-03 22:27:45
【问题描述】:

我一直试图在ImageView 上绘制Canvas,但在创建位图后,我在屏幕上看不到任何图像。我唯一得到的是我在onDraw 方法中绘制的小圆圈。我想在ImageView 上有Canvas

我有以下代码:

public class MainActivity extends AppCompatActivity {

  ImageView imageView;
  Bitmap myBitmap;
  Paint paint;
  Button button;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);

  }

  public void onClickButton(View view) {

    View v = new DrawCanvas(getApplicationContext());
    Bitmap bitmap = Bitmap.createBitmap(48, 48, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);

    v.draw(canvas);
    imageView = (ImageView) findViewById(R.id.testpicture);
    imageView.setImageBitmap(bitmap);
  }
}

public class DrawCanvas extends View {

    Paint paint = new Paint();

    public DrawCanvas(Context context) {
      super(context);
    }

    public DrawCanvas(Context context, AttributeSet attrs) {
      super(context, attrs);
    }


    @Override
    public void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      paint.setColor(Color.RED);

      canvas.drawCircle(25, 25, 5, paint);
    }
}

提前致谢!

【问题讨论】:

    标签: java android canvas bitmap imageview


    【解决方案1】:

    首先,你把事情复杂化了。你不需要或不想要一个视图来做你正在做的事情。如果你想画一个圆,在你的 onClick 中使用 canvas.drawCircle 直接在画布上画。

    其次,所有的 setImageBitmap 都会覆盖您之前设置的任何位图。如果您希望它显示在上一张图片上,您有 2 个选项:

    1) 将两个图像视图叠加使用,并将顶部图像设置为在画布上制作的位图(要完成这项工作,您可能需要确保位图上的背景颜色是透明的)。

    2) 创建一个从 ImageView 子类化的新视图,通过覆盖 onDraw 来显示 2 个位图。

    第一种方法可能更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多