Activity的onTouchEvent(),而点击按钮不会被调用 [英] Activity's onTouchEvent() is not being called while clicking on Button
问题描述
我想要做一些B.logic在 Activity.onTouchEvent()
方法。它是为的TextView
和其他非点击视图工作的罚款。 。然而,这是没有得到所谓的uponclicking 按钮
。但我需要这一点。
I want to do some B.logic in Activity.onTouchEvent()
method. It is working fine for TextView
and other non clickable views. However, it is not getting called uponclicking of Button
. But I need that too.
下面是code。
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "Oh shit!! click performed... :(", Toast.LENGTH_LONG).show();
}
});
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG, "ssssssssssssssssssssssss:touch");
return super.onTouchEvent(event);
}
public boolean dispatchTouchEvent(MotionEvent event) {
int eventaction=event.getAction();
switch(eventaction) {
case MotionEvent.ACTION_MOVE:
break;
default:
break;
}
return super.dispatchTouchEvent(event);
}
}
请帮我从这个梳理。
推荐答案
我用dispatchTouchEvent(MotionEvent EV)的要求。这里是溶液
I have used dispatchTouchEvent(MotionEvent ev) as required. Here is the solution.
private boolean isInSideClicked = false;
public boolean dispatchTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
View content = findViewById(R.id.textView1);
int[] contentLocation = new int[2];
content.getLocationOnScreen(contentLocation);
Rect rect = new Rect(contentLocation[0],
contentLocation[1],
contentLocation[0] + content.getWidth(),
contentLocation[1] + content.getHeight());
View frame = findViewById(R.id.editText1);
int[] frameLocation = new int[2];
frame.getLocationOnScreen(frameLocation);
Rect framerect = new Rect(frameLocation[0],
frameLocation[1],
frameLocation[0] + frame.getWidth(),
frameLocation[1] + frame.getHeight());
Log.d(TAG, "rect: "+rect.bottom+" , "+rect.top+" , "+rect.left+" , "+rect.right);
Log.d(TAG, "FrameRect: "+framerect.bottom+" , "+framerect.top+" , "+framerect.left+" , "+framerect.right);
Log.d(TAG, "x: "+event.getX()+" y: "+event.getY());
if((rect.contains((int)event.getX(), (int)event.getY()) || framerect.contains((int)event.getX(), (int)event.getY()) ) ) {
isInSideClicked = true;
}
if(isInSideClicked){
return super.dispatchTouchEvent(event);
}else{
return true;
}
}else if(event.getAction() == MotionEvent.ACTION_UP && isInSideClicked) {
isInSideClicked = false;
return super.dispatchTouchEvent(event);
}else if(event.getAction() == MotionEvent.ACTION_MOVE && isInSideClicked) {
return super.dispatchTouchEvent(event);
}else{
isInSideClicked = false;
return true;
}
}
下面是关于如何触摸事件是由操作系统级别进行处理的层次结构。
Below is the hierarchy on how the touch event is processed by OS level.
Activity.dispatchTouchEvent()
ViewGroup.dispatchTouchEvent()
View.dispatchTouchEvent()
View.onTouchEvent()
ViewGroup.onTouchEvent()
Activity.onTouchEvent()
有了这个,我有限制的,不能在需要的布局/视图的意见,触摸事件。
With this I have restricted the touch events of the views which are not in required layouts/views.
这篇关于Activity的onTouchEvent(),而点击按钮不会被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!