これが最善の方法かどうかはわかりませんが、 の独自のサブクラスを定義して のImageView
ような名前を付けると、はるかに簡単になりますDrawableImageView
。からすべての基本的なコンストラクターを実装していることを確認してから、メソッドImageView
をオーバーライドする必要があります。onTouchEvent
そのイベントから、タッチ座標を取得して に保存し、メソッドをオーバーライドしてイメージを「ペイント」することでArrayList<Point>
、その ArrayList を使用できます。onDraw
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
/>
編集
あなたのコメントに応えて、画像の上に描画する既定の方法はありません。これは自分で実装する必要があるためPoints
、ArrayList に格納することをお勧めします。ここで何を達成しようとしているのかよくわかりませんが、(たとえば) 画像の上に黒い点を描画するには、オーバーライドする必要があります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
}
}
また、View 自体を強制的に再描画するには、 (上で追加した)invalidate()
メソッドを使用する必要があります。onTouchEvent()