图片点击之区域点击

原创 2016年08月29日 13:45:56
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;
        }
    }
});



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

点击图片特定区域实现图片动态切换(图片热点、谷歌手形切换)

关于点击图片的特定区域实现图片的动态切换效果,在网上找了很久,也没能找到合适的例子,好吧,只有自己动手写一个...     此案例运用了图片的热点技术,可以链接到特定的网页文件,但是此处不需要,我只...

andrioid 扩展图片,即点击图片以外的布局区域也响应图片事件

方法一: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orie...

鼠标点击区域外层消失

C# 在一个区域点击检测

使用android.view.TouchDelegate扩大View的触摸点击区域

Android4.0规定的有效可触摸的UI元素标准是48dp,转化为一个物理尺寸,约为9毫米。建议的目标大小为7~10毫米,这一点与iPhone一致,这是一个用户手指能准确并且舒适触摸的区域。如果所示...

点击空白区域隐藏软键盘

  • 2015-05-21 16:30
  • 5.65MB
  • 下载

触屏手机点击区域的小秘密

做触屏手机产品设计,要注意所有的可点击元素都有足够的点击区域,但是这并不是说你要把所有的按钮图标链接都设计的足够大,手机上的视觉焦点和操作焦点是不一样的,操作焦点是可被放大或移动的点击区域。 这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)