Viewのイベント配信
4219 ワード
Viewのイベント配信は、ViewとViewグループのイベント配信に分けられます
Viewのイベント配信は主に3つの方法 である.
カスタムbutton印刷関連ロゴ
メインインタフェース
書き込みコードテストによると、dispatchTouchEvent()->onTouchListener()(設定されているかどうか、または現在のViewがEnableされているかどうかを判断する)->onTouchEvent();
ViewGroupのイベント配信の主な3つの方法: dispatchTouchEvent() onInterceptTouchEvent() onTouchEvent()
カスタムLinearLayout印刷関連イベントのトリガー
Viewのイベント配信
* dispatchTouchEvent()
* onTouchListener()
* onTouchEvent()
カスタムbutton印刷関連ロゴ
public class MyButton extends android.support.v7.widget.AppCompatButton {
private static final String TAG = "MyButton";
public MyButton(Context context) {
super(context);
}
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
KLog.d(TAG, "onTouchEvent: ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
KLog.d(TAG, "onTouchEvent: ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
KLog.d(TAG, "onTouchEvent: ACTION_UP");
break;
}
return super.onTouchEvent(event);
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
KLog.d(TAG, "dispatchTouchEvent: ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
KLog.d(TAG, "dispatchTouchEvent: ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
KLog.d(TAG, "dispatchTouchEvent: ACTION_UP");
break;
}
return super.dispatchTouchEvent(event);
}
}
メインインタフェース
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MyButton";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
KLog.d(TAG, "onTouch: ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
KLog.d(TAG, "onTouch: ACTION_MOVE");
break;
case MotionEvent.ACTION_UP:
KLog.d(TAG, "onTouch: ACTION_UP");
break;
}
return false;
}
});
}
}
log:
06-02 13:19:31.677 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:49)#dispatchTouchEvent ] dispatchTouchEvent: ACTION_DOWN
06-02 13:19:31.677 3119-3119/com.robert.touchevent D/MyButton: [ (MainActivity.java:21)#onTouch ] onTouch: ACTION_DOWN
06-02 13:19:31.678 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:32)#onTouchEvent ] onTouchEvent: ACTION_DOWN
06-02 13:19:32.070 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:52)#dispatchTouchEvent ] dispatchTouchEvent: ACTION_MOVE
06-02 13:19:32.070 3119-3119/com.robert.touchevent D/MyButton: [ (MainActivity.java:24)#onTouch ] onTouch: ACTION_MOVE
06-02 13:19:32.071 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:35)#onTouchEvent ] onTouchEvent: ACTION_MOVE
06-02 13:19:32.308 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:56)#dispatchTouchEvent ] dispatchTouchEvent: ACTION_UP
06-02 13:19:32.309 3119-3119/com.robert.touchevent D/MyButton: [ (MainActivity.java:28)#onTouch ] onTouch: ACTION_UP
06-02 13:19:32.309 3119-3119/com.robert.touchevent D/MyButton: [ (MyButton.java:39)#onTouchEvent ] onTouchEvent: ACTION_UP
書き込みコードテストによると、dispatchTouchEvent()->onTouchListener()(設定されているかどうか、または現在のViewがEnableされているかどうかを判断する)->onTouchEvent();
ViewGroupのイベント配信
カスタムLinearLayout印刷関連イベントのトリガー