2012-06-24 22 views
5

以下是ImageView的简单扩展代码,允许用户使用手指进行绘制。ImageView:onDraw方法在图像背景上绘制“后面”,而不是在顶部

public class MyImageView extends ImageView { 

    List<Point> points = new ArrayList<Point>(); 
    Paint paint = new Paint(); 

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

    @Override 
    public void onDraw(Canvas canvas) { 
     for (Point point : points) { 
      canvas.drawCircle(point.x, point.y, 5, paint); 
      // Log.d(TAG, "Painting: "+point); 
     } 
     super.onDraw(canvas); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     super.onTouchEvent(event); 
     Point point = new Point(); 
     point.x = event.getX(); 
     point.y = event.getY(); 
     points.add(point); 
     invalidate(); 
     Log.d("", "point: " + point); 
     return true; 
    } 

    class Point { 
     float x, y; 
     @Override 
     public String toString() { 
      return x + ", " + y; 
     } 
    } 
} 

这项工作相当不错。

现在,我想使用此代码绘制位图的顶部。

我用:

MyImageView ivPic = (MyImageView) dialog.findViewById(R.id.ivPic); 
ivPic.setImageBitmap(picture); 

但图件绘制的“幕后黑手”的位图:

enter image description here

你有什么想法,我怎么能在的“顶部”画位图?

+0

你有没有设法将你的图纸和位图的位图放在后面?我在做同样的事情,不能保存修改过的位图 –

回答

5

我在onDraw方法的顺序改变了,我把super.onDraw(canvas);一开始,我觉得现在的工作

0

我回答我的问题,只是找到了答案:

ivPic.setBackgroundDrawable(new BitmapDrawable(getResources(),picture)); 

不知道这是最好的做法,但认为对我的作品......

2

倍率和使用dispatchDraw的方法,我用它来绘制了意见

+0

Mosh你还记得吗?你在overriden dispatchDraw方法中放什么? – quinestor

+0

@quinestor什么? –

+0

你我的朋友现在保存了我的一周。非常感谢。我在RecyclerView上使用它,并且完美运行。从API> 23这是一个方法onDrawForeground(画布画布),正是这样做。但我支持API> = 16。 –

相关问题