Activity的onTouchEvent(),而点击按钮不会被调用 [英] Activity's onTouchEvent() is not being called while clicking on Button

查看:339
本文介绍了Activity的onTouchEvent(),而点击按钮不会被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要做一些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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆