每次触摸都在imageview上绘制位图 - android

时间:2015-04-14 12:21:08

标签: android

在我的imageview中,我想在每次触摸imageview时绘制一个位图,而不删除前一个位图。下面的代码绘制了一个新的位图,但也删除了前一个位图。如何在添加新位图的同时保留以前的位图?感谢

imageview.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        int action = event.getAction();
        x = event.getX();
        y = event.getY();

        switch (action) {

        case MotionEvent.ACTION_DOWN:

            Bitmap.Config config = bm.getConfig();
            int width = bm.getWidth();
            int height = bm.getHeight();

            Bitmap bm2 = Bitmap.createBitmap(width, height, config);
            Canvas c = new Canvas(bm2);

            c.drawBitmap(bm, 0, 0, null);

            Bitmap repeat = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
            Bitmap repeat2 = Bitmap.createScaledBitmap(repeat, 50, 50, false);
            c.drawBitmap(repeat2, x, y, p);

            imageview.setImageBitmap(bm2);
        break;
        return true;

        }
    });
}

Like this image

4 个答案:

答案 0 :(得分:1)

如果每次都使用相同的位图......

  1. 使Bitmap成为成员变量并在onCreate系统中初始化它。
  2. 创建一个ArrayList作为成员变量。
  3. 每次触摸ImageView时都添加一个新点。
  4. 循环点列表并将相同的位图绘制到ImageView画布上。

答案 1 :(得分:0)

我认为你需要使用一个Bitmap数组,然后使用onClick迭代数组。

答案 2 :(得分:0)

你需要有两层。当您更改位图的某些像素时,它将无法处理两个图层。因此,您需要在图像视图上创建另一个图层,并在那里设置新的位图。

你必须跟踪你在arraylist中解析的像素,这样你就可以通过将这些像素重置为透明来处理橡皮擦。

答案 3 :(得分:0)

这样做。

Bitmap bm2 = null;
Canvas c = null;   

imageview.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            int action = event.getAction();
            x = event.getX();
            y = event.getY();

            switch (action) {

            case MotionEvent.ACTION_DOWN:

                Bitmap.Config config = bm.getConfig();
                int width = bm.getWidth();
                int height = bm.getHeight();

                if(bm2==null){
                  bm2 = Bitmap.createBitmap(width, height, config);
                  c = new Canvas(bm2);
                }
                c.drawBitmap(bm, 0, 0, null);

                Bitmap repeat = BitmapFactory.decodeResource(getResources(), R.drawable.pic);
                Bitmap repeat2 = Bitmap.createScaledBitmap(repeat, 50, 50, false);
                c.drawBitmap(repeat2, x, y, p);

                imageview.setImageBitmap(bm2);
            break;
            return true;

            }
        });
    }