0

キャンバス上にビットマップ イメージを描画しました。

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 の画面に基づいて画像が表示されます。私のタッチ入力では、画像の x 座標と y 座標の位置を渡し、そのピクセルを色で塗りつぶして、画像がドラッグ イベントでペイントされたことを示す必要があります。x および y 座標パラメータを渡すにはどうすればよいですか? 画像にピクセルをプロットするには、どの関数を使用すればよいですか? あなたの助けと甘い時間に感謝します。

4

1 に答える 1

0

これが最善の方法かどうかはわかりませんが、 の独自のサブクラスを定義して の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()

于 2012-12-08T23:21:21.533 に答える