【Android原创】手势方向判断

嗯、、、自己在游戏开发过程中遇到了这样一个问题

第一次手指按下记录当前坐标,然后第二次点击时判断是第一次点击的哪个方向(上、下、左、右、左上、左下、右上、右下)8个方向

于是乎,使出了程序员的主动技能——搜索

很遗憾,没有什么收获


只能硬头皮写了



刚开始,我是这样构思的。。。。

写起来发现不太容易写


于是乎


干脆这样写好了。。

果然容易的多

package layout;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.ask.jilun.R;

/**
 */

public class WalkView extends FrameLayout implements View.OnTouchListener {

    private final int UP = 1;
    private final int DOWN = 2;
    private final int LEFT = 3;
    private final int RIGHT = 4;
    private final int UPPER_LEFT = 5;
    private final int BOTTOM_LEFT = 6;
    private final int UPPER_RIGHT = 7;
    private final int BOTTOM_RIGHT = 8;
    private final int UP_STATND = 9;
    private final int DOWN_STATND = 10;
    private final int LEFT_STATND = 11;
    private final int RIGHT_STATND = 12;
    private final int UPPER_LEFT_STATND = 13;
    private final int BOTTOM_LEFT_STATND = 14;
    private final int UPPER_RIGHT_STATND = 15;
    private final int BOTTOM_RIGHT_STATND = 16;
    private ImageView walkImg;//人物
    private Context context;
    private int windowWidth;//屏幕宽高
    private int windowHeight;
    private int characterX;//人物的坐标
    private int characterY;



    public WalkView(Context context) {
        super(context);
        this.context = context;
        WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        characterX = windowWidth = wm.getDefaultDisplay().getWidth();
        characterY =  windowHeight = wm.getDefaultDisplay().getHeight();
        characterX = windowWidth/2 - 30;
        characterY = windowHeight/2 - 38;
        initView();
    }

    private void initView(){
        setOnTouchListener(this);//设置监听
        walkImg = new ImageView(context);
        walkImg.setLayoutParams(new LinearLayout.LayoutParams(60,76));
        walkImg.setImageResource(R.drawable.zoudong1);
        walkImg.setX(windowWidth/2-30);
        walkImg.setY(windowHeight/2-38);
        addView(walkImg);
        addView(frameLayout);
    }


    private void selectDirection(int direction ,int x , int y ,int newX ,int newY){
        int distance = (int) Math.sqrt(Math.pow((x - newX),2)+Math.pow((y - newY),2));//获取两点间距离
        switch (direction){
            case UP:
                break;
            case DOWN:
                break;
            case LEFT:
                break;
            case RIGHT:
                break;
            case UPPER_LEFT:
                break;
            case BOTTOM_LEFT:
                break;
            case UPPER_RIGHT:
                break;
            case BOTTOM_RIGHT:
                break;
            case UP_STATND:
                break;
            case DOWN_STATND:
                break;
            case LEFT_STATND:
                break;
            case RIGHT_STATND:
                break;
            case UPPER_LEFT_STATND:
                break;
            case BOTTOM_LEFT_STATND:
                break;
            case UPPER_RIGHT_STATND:
                break;
            case BOTTOM_RIGHT_STATND:
                break;
        }
    }

    private int toucheJudge(int x , int y){
        int bitmapX = (int) walkImg.getX();
        int bitmapY = (int) walkImg.getY();
        int bitmapWith = walkImg.getWidth();
        int bitmapHeight = walkImg.getHeight();
        if(x > bitmapX && x < (bitmapX + bitmapWith) && y < bitmapY){
            Log.e("","判断  上");
            return UP;
        }else if(x > bitmapX && x < (bitmapX + bitmapWith) && y > (bitmapY + bitmapHeight)){
            Log.e("","判断  下");
            return DOWN;
        }else if(y > bitmapY && y < (bitmapY + bitmapHeight) && x < bitmapX){
            Log.e("","判断  左");
            return LEFT;
        }else if(y > bitmapY && y < (bitmapY + bitmapHeight) && x > (bitmapX + bitmapWith)){
            Log.e("","判断  右");
            return RIGHT;
        }else if(x < bitmapX && y < bitmapY){
            Log.e("","判断  左上");
            return UPPER_LEFT;
        }else if(y > (bitmapY + bitmapHeight) && x < bitmapX){
            Log.e("","判断  左下");
            return BOTTOM_LEFT;
        }else if(x > (bitmapX + bitmapWith) && y < bitmapY){
            Log.e("","判断  右上");
            return UPPER_RIGHT;
        }else if(x > (bitmapX + bitmapWith) && y > (bitmapY+ bitmapHeight)){
            Log.e("","判断  右下");
            return BOTTOM_RIGHT;
        }
        return 0;
    }
    boolean isFirstOnTouch = false;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        int x = 0;
        int y = 0;
        int newX = 0;
        int newY = 0;
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                x = (int) event.getX();
                y = (int) event.getY();
                Log.e("","按下x:"+x);
                Log.e("","按下y:"+y);
                toucheJudge(newX,newY);
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:

                break;
            default:
                super.onTouchEvent(event);
        }
        return true;
    }


}
就这样搞定了,测试发现还挺好用的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值