如何通过在android中指定x和y坐标在画布上绘制的位图图像上绘制一个点?

时间:2012-12-08 23:10:40

标签: android canvas

我在画布上绘制了一个位图图像。

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.sq);
        canvas.drawColor(color.black);  
        Rect dstRectForRender = new Rect(0,0,320,450);               
        canvas.drawBitmap(image, null,dstRectForRender,null);   

根据cnavs上的screnn显示图像。 在我的触摸输入上,我需要传递图像的x和y坐标位置,并用颜色填充该像素,以显示图像是在拖动事件上绘制的。 如何传递x和y坐标参数?我应该使用哪些函数来绘制图像上的像素? 感谢您的帮助和愉快的时光。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是最佳方式,但如果您定义了自己的ImageView子类并将其命名为某事,那么这样做会容易得多比如DrawableImageView。您必须确保从ImageView实现所有基本构造函数,然后覆盖onTouchEvent方法。从该事件中,您可以获取触摸坐标并将其存储在ArrayList<Point>中,并通过覆盖onDraw方法并“绘制”图像来使用该ArrayList。

public class DrawableImageView extends ImageView {

ArrayList<Point> list = new ArrayList<Point>();    

//constructors..

@Override
public boolean onTouchEvent (MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
    list.add(new Point(x,y));
    invalidate();
}

这只是一个非常简短的概述,如何开始你的课程,可能不是最准确的做事方式(取决于你的具体代码)。现在,不是在xml中使用<ImageView>标签(或者以编程方式加载ImageView),而是像这样引用你的子类:

<your.package.name.DrawableImageView
/>

修改

在回复您的评论时,没有预定的方法来绘制图像。您必须自己实现,这就是我建议在ArrayList中存储Points的原因。我不确定你要在这里实现什么,但是要在图像上绘制(例如)黑点,你必须覆盖onDraw

public void onDraw(Canvas c) {
    super.onDraw(c);
    for(Point p : list) {

        //Draw black point at x and y.. I'm posting from my cell so I can't go into much detail
   }
}

此外,要强制视图重绘自己,您需要使用invalidate()中的onTouchEvent()方法(我已在上面添加)。