0

画面にタッチイベントで円を描くアプリを作っています。次のコードは正常に動作します。

 Class Punto extends view{
   Paint paint;
   Point point = new Point();

 Public Punto(Context contex){
 super(context);
 }

 @Override
 protected void onDraw(Canvas canvas){
            super.onDraw(canvas);              
            paint.setColor(Color.BLUE);
            canvas.drawCircle(point.x,point.y,10,paint);
            }

 @Override
 public boolean onTouchEvent (MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN :
                point.x = event.getX();
                point.y = event.getY();
                break;
        }
        return true;
    }

class Point{
   float x,y;
 }

アクティビティ:

public class Pintar extends Activity {
 
@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   Punto punto = new Punto(this);
   setContentView(punto);
}

ただし、円を絵に描く必要があります(私の場合は市場の飛行機です)が、どうすればこれができるかわかりません。

4

1 に答える 1

1

ImageView を拡張するだけです。

class Punto extends ImageView {

申し訳ありませんが、あなたが投稿したコードがコンパイルされたと思いました...

これを試して:

public class TouchImage extends ImageView {
    Paint paint = new Paint();
    Point point = new Point();

    public TouchImage(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint.setColor(Color.BLUE);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(point.x, point.y, 10, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            point.x = event.getX();
            point.y = event.getY();
            invalidate();
        }
        return true;
    }

    class Point {
        float x, y;
    }
}

このようなレイアウトで:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

        <!-- Use your reverse package name, for instance "example.com" is -->  
    <com.example.TouchImage
        android:id="@+id/touchImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/map" />

</LinearLayout>

そして、TouchImage がタッチされたときに座標をインターセプトするアクティビティ:

public class Example extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        TouchImage touchImage = (TouchImage) findViewById(R.id.touchImage);
        touchImage.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // Call the existing onTouchEvent() in TouchImage,
                //   if it draws a circle fetch the coordinates
                if(v.onTouchEvent(event)) {
                    // Do something with event.getX(), event.getY()
                }
                return true;
            }
        });
    }
}
于 2012-10-31T23:15:45.890 に答える