編輯:關於Android編程
三個方法之間的關系
publicbooleandispatchTouchEvent(MotionEventev){
booleanconsume=false;
if(onInterceptTouchEvent(ev)){
consume=onTouchEvent(ev);
}else{
if(hasChild()){
consume = child.dispatchTouchEvent(ev);
}else{
consume = onTouchEvent(ev);
}
}
returnconsume;
}
publicclassParentLayoutextendsLinearLayout{
publicParentLayout(Contextcontext){super(context);}
publicParentLayout(Contextcontext,AttributeSetattrs){super(context,attrs);}
publicParentLayout(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}
@Override
publicbooleandispatchTouchEvent(MotionEventev){
ABLog.e("DefaultReturn"+String.valueOf("default:false"));
returnsuper.dispatchTouchEvent(ev);
}
@Override
publicbooleanonInterceptTouchEvent(MotionEventev){
ABLog.e("DefaultReturn"+String.valueOf("default:false"));
returnsuper.onInterceptTouchEvent(ev);
}
@Override
publicbooleanonTouchEvent(MotionEventev){
ABLog.e("DefaultReturn"+String.valueOf("default:false"));
returnsuper.onTouchEvent(ev);
}
}
publicclassChildViewextendsTextView{
publicChildView(Contextcontext){super(context);}
publicChildView(Contextcontext,AttributeSetattrs){super(context,attrs);}
publicChildView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}
@Override
publicbooleandispatchTouchEvent(MotionEventev){
ABLog.e("DefaultReturn"+String.valueOf("default:false"));
returnsuper.dispatchTouchEvent(ev);
}
@Override
publicbooleanonTouchEvent(MotionEventev){
ABLog.e("DefaultReturn"+String.valueOf("default:false"));
returnsuper.onTouchEvent(ev);
}
}
點擊ParentView(2處),打印Log
dispatchTouchEvent方法再探
點擊ParentView(2處),打印Log
總結一下上面Log情況?Log結果都和一開始全部默認情況相同。onInterceptTouchEvent為false的情況,就是調用super.onInterceptTouchEvent的情況。onInterceptTouchEvent返回false,表示點擊事件不攔截,向子View傳遞。
publicclassChildViewextendsTextView{
publicChildView(Contextcontext){
super(context);
}
publicChildView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
publicChildView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}
@Override
publicbooleanonTouchEvent(MotionEventev){
ABLog.e("DefaultReturn"+String.valueOf("false"));
returnsuper.onTouchEvent(ev);
}
}
publicclassMainActivityextendsAppCompatActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ChildViewview=(ChildView)findViewById(R.id.myChildView);
view.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
ABLog.e("OnClickListener");
}
});
view.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
ABLog.e("setOnTouchListener");
returnfalse;
}
});
}
}
點擊ChildView(1處),打印Log 前一部分,為Action_Down觸發;後一部分,為Action_Up觸發。
view.setOnTouchListener(newView.OnTouchListener(){
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
ABLog.e("setOnTouchListener");
return true;
}
});
點擊ChildView(1處),打印Log 點擊時間在OnTouch方法中被處理,所以不會傳到onTouchEvent方法中去了。因此更加不會傳到OnClickListener監聽方法中去了。 一個為Action_Down觸發,一個為Action_Up觸發。
Android開發本地及網絡Mp3音樂播放器(十九)通知媒體庫更新剛下載的MP3
實現功能:通知媒體庫更新糾結了幾天,百度到一個方法,可以在安卓4.4,通知媒體庫更新。媒體庫更新了,重新打開APP,就可以看到新的歌曲,但這樣還是不完善。後續將博文,將實
Android-Launcher開發之AppWidget(2)
AppWidget 通過內存共享進行數據通訊.原理圖如下: 1.創建一個BroadcastReceiver,繼承AppWidgetProvider. 2.在Androi
Android MVP模式簡單例子實戰
概要 對於mvp模式,大家都知道是由mvc演變而來的,對於MVC大家都知道 M Model(用於存放實體模型與業務邏輯) V View(存放布局和資源文件) C Co
Android中Service服務詳解(一)
本文詳細分析了Android中Service服務。分享給大家供大家參考,具體如下:一、Service簡介Service是Android中實現程序後台運行的解決方案,適用於