onTouchによる画像の移動

| コメント(0)
画面をタッチして画像を移動するには、Bitmap や SurfaceView を使って少しややこしいのですが、 MotionEvent を使った簡単な方法を教えてもらったので、公開します。

main.xml に view1 を1個用意してください。 test20.bmp
package net.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
 
 
public class FrameMoveActivity extends Activity
          implements OnTouchListener {
    private View move_view1;
     int currentX;   //Viewの左辺座標:X軸
 
    int currentY;   //Viewの上辺座標:Y軸
    int offsetX;    //画面タッチ位置の座標:X軸
    int offsetY;    //画面タッチ位置の座標:Y軸
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        move_view1 = findViewById(R.id.view1);        
        //リスナーの設定
        move_view1.setOnTouchListener(this);
     }
 
    @Override
    public boolean onTouch(View view, MotionEvent event) {
 
        int x = (int) event.getRawX();
        int y = (int) event.getRawY();
 
        switch(event.getAction()) {
 
        case MotionEvent.ACTION_MOVE:
            int diffX = offsetX - x;
            int diffY = offsetY - y;
 
            currentX -= diffX;
            currentY -= diffY;
            //画像の移動
            view.layout(currentX, currentY, currentX + view.getWidth(),
                                       currentY + view.getHeight());
            offsetX = x;
            offsetY = y;
            break;
           
        case MotionEvent.ACTION_DOWN:
            //x,yセット
            currentX = view.getLeft();
            currentY = view.getTop();
            offsetX = x;
            offsetY = y;
            break;
           
        case MotionEvent.ACTION_UP:
            break;
        }
        return true;
    }
}

とても簡単に移動が行えた。ちょっとしたトランプゲームなら応用できそうだ。
で、少し変形してサンプルを作ってみた。

詳しくは続きで。。。
 
ゲームではなく、トランプ2枚を動かすだけのものです。bmp21.bmp
時間があったら、ゲームを作りたいものです。

クリックした時、クリックしたトランプが上にくるようにしました。
 
   view.bringToFront(); 





ここにプログラム(MoveView.zip)をアップします。

コメントする