class 有 onTouchEvent 时如何使用 onCLick
How to use onCLick when class has onTouchEvent
我有 class :
class MyLinearLayout extends LinearLayout {
public ProLinearLayout(Context context, String options) {
super(context);
something();
}
private void something() {
// .....
}
-- begin block A
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if ( action == MotionEvent.ACTION_DOWN ) {
getBackground().setColorFilter( Color.GRAY, PorterDuff.Mode.ADD );
invalidate();
}
if ( action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP ) {
getBackground().clearColorFilter();
invalidate();
}
return true;
}
-- end block A
}
我用它:
MyLinearLayout obj = new MyLinearLayout( this_activity);
...
obj.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
// if comment block A, this this code works
// if using bock A, this code does not work -- WHY. HOW TO RUN THIS CODE WHEN USING BLOCK A
}
});
当评论onTouchEvent(A块)时,onClick中的代码有效。
使用 onTouchEvent(块 A)时,onClick 中的代码不起作用。
如何运行同时使用onTouchEvent时的OnClick代码
我找到了解决办法
所以使用 dispatchTouchEvent 而不是 onTouchEvent
-- begin block A
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
//
int action = event.getAction();
if ( action == MotionEvent.ACTION_DOWN ) {
getBackground().setColorFilter( Color.GRAY, PorterDuff.Mode.ADD );
invalidate();
}
if ( action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP ) {
getBackground().clearColorFilter();
invalidate();
}
//
return super.dispatchTouchEvent(event);
}
-- end block A
我有 class :
class MyLinearLayout extends LinearLayout {
public ProLinearLayout(Context context, String options) {
super(context);
something();
}
private void something() {
// .....
}
-- begin block A
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if ( action == MotionEvent.ACTION_DOWN ) {
getBackground().setColorFilter( Color.GRAY, PorterDuff.Mode.ADD );
invalidate();
}
if ( action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP ) {
getBackground().clearColorFilter();
invalidate();
}
return true;
}
-- end block A
}
我用它:
MyLinearLayout obj = new MyLinearLayout( this_activity);
...
obj.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
// if comment block A, this this code works
// if using bock A, this code does not work -- WHY. HOW TO RUN THIS CODE WHEN USING BLOCK A
}
});
当评论onTouchEvent(A块)时,onClick中的代码有效。 使用 onTouchEvent(块 A)时,onClick 中的代码不起作用。
如何运行同时使用onTouchEvent时的OnClick代码
我找到了解决办法 所以使用 dispatchTouchEvent 而不是 onTouchEvent
-- begin block A
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
//
int action = event.getAction();
if ( action == MotionEvent.ACTION_DOWN ) {
getBackground().setColorFilter( Color.GRAY, PorterDuff.Mode.ADD );
invalidate();
}
if ( action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP ) {
getBackground().clearColorFilter();
invalidate();
}
//
return super.dispatchTouchEvent(event);
}
-- end block A