我在画布上绘制了一个位图图像。
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坐标参数?我应该使用哪些函数来绘制图像上的像素? 感谢您的帮助和愉快的时光。
答案 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()
方法(我已在上面添加)。