android判断是否被点击方法,[Android]父View如何知道子View被点击了
需求是這樣的:
封裝了一個(gè)View,類似這樣:
image.png
1處的view是添加進(jìn)來(lái)的,需要在點(diǎn)了1里面的某個(gè)view之后,把整個(gè)view隱藏掉。
因?yàn)?處的view是添加進(jìn)來(lái)的,它里面的子view的點(diǎn)擊事件都寫在它的類里面的,外部不知道有沒(méi)有被點(diǎn)擊,也就沒(méi)法隱藏整個(gè)view。
思路:利用view的OnTouchListener配合GestureDetector來(lái)通知是否被點(diǎn)擊了
如果這個(gè)view是ViewGroup,遍歷所有的子view,判斷子view和自身是否有點(diǎn)擊事件和是否顯示
private void setGesture(ViewGroup viewGroup){
if(viewGroup.hasOnClickListeners() && viewGroup.getVisibility() == VISIBLE){
viewGroup.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return detector.onTouchEvent(event);//一定要返回false,否則會(huì)攔截onClick事件
}
});
}
for(int i = 0;i
View view = viewGroup.getChildAt(i);
if(view instanceof ViewGroup){
setGesture((ViewGroup) view);
continue;
}
if(view.hasOnClickListeners() && view.getVisibility() == VISIBLE){
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return detector.onTouchEvent(event); //一定要返回false,否則會(huì)攔截onClick事件
}
});
}
}
}
如果是view就跳過(guò)遍歷子view這一步
配合GestureDetector:
detector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onSingleTapConfirmed(MotionEvent e) { //單擊
if(onViewClick!= null){
onViewClick.onClick(null);
}
return super.onSingleTapConfirmed(e);
}
});
總結(jié)
以上是生活随笔為你收集整理的android判断是否被点击方法,[Android]父View如何知道子View被点击了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                        - 上一篇: 管理系统模板c语言,管理系统c语言
 - 下一篇: android 代码浏览,Webview