图片点击之区域点击

public class RegionView extends ImageButton {

    private OnRegionListening onRegionListening;

    private int imgUp = 1;
    private int imgDown = 2;
    private int imgLeft = 3;
    private int imgRight = 4;
    private int imgCenter = 5;

    private int status;

        private int center;
        private int innerCircleRadius;


    public RegionView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public interface OnRegionListening {
        void onRegionListening(int Region);
        void onRegionCancel(int Region);
    }

    /**
     * 方向键盘的监听 1 上 2 下 3左 4右 5ok
     *
     * @param listening
     */
    public void setOnRegionListening(OnRegionListening listening) {
        onRegionListening = listening;
    }

    @Override
    public boolean onTouchEvent(MotionEvent paramMotionEvent) {
        float f1 = paramMotionEvent.getX();
        float f2 = paramMotionEvent.getY();

        float f3 = getWidth();

       float f4 = getHeight();

        center = getWidth()/2;
        innerCircleRadius = center / 3;


        switch (paramMotionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:

            status = 0;

            if ((f1 > f3 / 3.0F) && (f1 < 2.0F * f3 / 3.0F) && (f2 > f4 / 3.0F) && (f2 < f4 * 2.0F / 3.0F)) {
                status = imgCenter;
                setImageResource(R.mipmap.navigation_center);

            } else {
                if (f2 < (f4 / 2)) {

                    if (f1 < f3 / 3.0F) {
                        status = imgLeft;
                        setImageResource(R.mipmap.navigation_left);
                    } else if (f1 > (f3 / 3.0F) * 2.0F) {
                        status = imgRight;
                        setImageResource(R.mipmap.navigation_right);
                    } else {
                        status = imgUp;
                        setImageResource(R.mipmap.navigation_up);
                    }

                } else {
                    if (f1 < f3 / 3.0F) {
                        status = imgLeft;
                        setImageResource(R.mipmap.navigation_left);
                    } else if (f1 > (f3 / 3.0F) * 2.0F) {
                        status = imgRight;
                        setImageResource(R.mipmap.navigation_right);
                    } else {
                        status = imgDown;
                        setImageResource(R.mipmap.navigation_down);
                    }
                }

            }

            if (onRegionListening != null) {
                onRegionListening.onRegionListening(status);
            }

            break;
        case MotionEvent.ACTION_UP:
            if (onRegionListening != null) {
                onRegionListening.onRegionCancel(status);
            }
            removeCallbacks(runnable);
            post(runnable);
            break;
        case MotionEvent.ACTION_CANCEL:
            removeCallbacks(runnable);
            post(runnable);
            break;
        }

        return super.onTouchEvent(paramMotionEvent);
    }

    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            setImageResource(R.mipmap.navigation_normal);
        }

    };


    private int checkDir(float x, float y) {
                     int dir = 0;

                     if (Math.sqrt(Math.pow(y - center, 2) + Math.pow(x - center, 2)) < innerCircleRadius) {// 判断在中心圆圈内
                             dir = 5;
                             System.out.println("----中央");
                         } else if (y < x && y + x < 2 * center) {
                             dir = 2;
                             System.out.println("----向上");
                         } else if (y < x && y + x > 2 * center) {
                             dir = 3;
                             System.out.println("----向右");
                         } else if (y > x && y + x < 2 * center) {
                             dir = 1;
                             System.out.println("----向左");
                         } else if (y > x && y + x > 2 * center) {
                             dir = 4;
                             System.out.println("----向下");
                         }

                     return dir;
                 }


}


调用:

derectionView.setOnRegionListening(new RegionView.onRegionListening() {

    public void onRegionListening(int direction) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onRegionCancel(int direction) {

        switch (direction){
            case 1://上

                break;
            case 2://下

                break;
            case 3://左

                break;
            case 4://右

                break;
            case 5://中

                break;
        }
    }
});



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值