Android关于点击事件的特别处理

来源:互联网 发布:韦东山嵌入式linux项目 编辑:程序博客网 时间:2024/05/29 21:28

以前,自己做过点击控件的区域点击;但是,那时候做的就是将一个控件以左上角为原点,将一个控件分为几个部分,准备一个公式。然后通过eventmMotion.getX(),和eventMotion.getY(),获得点击事件在控件里面的x,y坐标。然后,再判断,这个x,y坐标在哪一个区域,然后再做出相应的处理。

但是,这次呢?情况不同。直接以图片说明,点击第一张图片中的虚线框,会在虚线框的右上角出现一个小X。效果是第二张图片,然后再点击界面的任何一个地方,小X就会消失,也就是回到第一张图片的样子。


点击虚线框,展示所有的删除图片。这个简单,就是获取所有的删除图片的引用,然后图片的显示属性置为可见,就行了。

现在的问题是:

1.我点击了删除图片以外的区域,怎么让他们消失。尤其是点击了屏幕上的其它控件怎么办,这些控件有自己的响应事件,总不能挨个将代码吧!如果没有添加点击事件,那么总不能,在加上点击事情吧!

2.如果点击的是删除图片,弹出对话框确认是不是删除资源。但是此时,其他的删除图标是不会消失的。

现在就来解决这两个问题。

第一,将布局文件中的根标签,我使用的是LinearLayout,使用自定义的。然后再复写这个自定义的事件处理方法,onInterceptTouchEvent(MotionEvent ev),在这个方法中,发送一个广播,在广播将点击事件在屏幕上(ev.getRawX(),ev.getRawY())的横纵坐标带过去。

第二,在相应的地方,我这里是fragment,拦截这个广播;然后获取点击事件的横纵坐标,和获取删除图片在屏幕上的位置。再做出判断,点击区域是不是删除的图片上。然后再做出相应的操作。

附上在广播处理中的代码:(效果已经实现)

<span style="white-space:pre"></span>    float evLocationX = intent.getFloatExtra(InterceptInfoLinearLayout.EV_LOCATION_TAG_X, 0);            float evLocationY = intent.getFloatExtra(InterceptInfoLinearLayout.EV_LOCATION_TAG_Y, 0);            //            Log.i(TAG, "evLocation:" + evLocation[0] + "," + evLocation[1]);            Log.i(TAG, "evLocationX:" + evLocationX + ",Y:" + evLocationY);                        int bookSize = mTreeBookUnits.size();                        int width = 0;            int heigth = 0;            ImageView deleteIcon = null;            if (bookSize > 0) {                width = mTreeBookUnits.get(0).getDeleteIcon().getWidth();                heigth = mTreeBookUnits.get(0).getDeleteIcon().getHeight();            }            int[] viewLocation = new int[2];            int j = 0;            for (; j < bookSize; j++) {                deleteIcon = mTreeBookUnits.get(j).getDeleteIcon();                deleteIcon.getLocationOnScreen(viewLocation);                if ((evLocationX <= viewLocation[0] + width && evLocationX >= viewLocation[0]) && (evLocationY <= viewLocation[1] + heigth && evLocationY >= viewLocation[1])) {                   //如果点击了一个删除图标                    break;                }            }                        Log.i(TAG, "mResetDeleteIconReceiver:j:" + j);                        if (j >= bookSize) {                //点击了一个删除图标                for (int i = 0; i < bookSize; i++) {                    mTreeBookUnits.get(i).getDeleteIcon().setVisibility(View.INVISIBLE);                }            }


0 0
原创粉丝点击