简体   繁体   English

为什么我的onTouchEvent从未触发过?

[英]Why is my onTouchEvent never fired?

I have set my onTouchlistener directly on my RelativeLayout, but it is never called. 我已经在我的RelativeLayout上直接设置了onTouchlistener,但从未调用过它。 Do you have any suggestion of what I might be doing wrong? 您是否对我可能做错了任何建议? My code: 我的代码:

layout_own_container.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent event) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(), "WTF", Toast.LENGTH_SHORT).show();
            final int X = (int) event.getRawX();
            float dest = 0;
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
                _xDelta = X - lParams.leftMargin;
                break;
            case MotionEvent.ACTION_UP:
                switch (view.getId()){
                case 1:
                    dest = bIOwn.getWidth() + bIWish.getWidth();
                    break;
                }
                ObjectAnimator animation2 = ObjectAnimator.ofFloat(view, "x", dest);
                animation2.setDuration(100);
                animation2.start();
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                float width = layout_own_top.getWidth() - dest;
                if (view.getWidth() != width){
                    RelativeLayout.LayoutParams layoutParams_move = (RelativeLayout.LayoutParams) view.getLayoutParams();
                    layoutParams_move.leftMargin = X - _xDelta;
                    layoutParams_move.rightMargin = -(layout_own_top.getWidth() + 200);
                    view.setLayoutParams(layoutParams_move);
                }
                break;
            }
            layout_own_top.invalidate();
            return true;
        }
    });

EDIT 编辑

This is my xml: 这是我的xml:

<RelativeLayout
            android:id="@+id/relative_iown_top"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#26466D"
            android:orientation="vertical" >

            <Button
                android:id="@+id/button_iOwn"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="80sp"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:background="#003f62"
                android:text="" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10sp"
                android:text="iOwn"
                android:textColor="#FFFFFF"
                android:textSize="28sp"
                android:textStyle="bold" />

            <Button
                android:id="@+id/button_iWish"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="80sp"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@+id/button_iOwn"
                android:background="#0e6798"
                android:text="" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_marginLeft="85sp"
                android:text="iWish"
                android:textColor="#FFFFFF"
                android:textSize="28sp"
                android:textStyle="bold" />
        </RelativeLayout>

But you are doing wrong here. 但是您在这里做错了。 You have mentioned that you need to touch on RelativeLayout but here you are using 您已经提到需要触摸RelativeLayout,但是在这里您正在使用

 layout_own_container = new LinearLayout(this); 

means linear layout. 表示线性布局。 So you have to change and find id for your Relative Layout on onCreate() method. 因此,您必须在onCreate()方法上更改并找到相对布局的ID。

 RelativeLayout rel = (RelativeLayout) findViewById(R.id.relative_iown_top); 

 rel.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
          Toast.makeText(getApplicationContext(), "WTF", Toast.LENGTH_SHORT).show();
        final int X = (int) event.getRawX();
        float dest = 0;
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
            _xDelta = X - lParams.leftMargin;
            break;
        case MotionEvent.ACTION_UP:
            switch (view.getId()){
            case 1:
                dest = bIOwn.getWidth() + bIWish.getWidth();
                break;
            }
            ObjectAnimator animation2 = ObjectAnimator.ofFloat(view, "x", dest);
            animation2.setDuration(100);
            animation2.start();
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            float width = layout_own_top.getWidth() - dest;
            if (view.getWidth() != width){
                RelativeLayout.LayoutParams layoutParams_move = (RelativeLayout.LayoutParams) view.getLayoutParams();
                layoutParams_move.leftMargin = X - _xDelta;
                layoutParams_move.rightMargin = -(layout_own_top.getWidth() + 200);
                view.setLayoutParams(layoutParams_move);
            }
            break;
        }
        layout_own_top.invalidate();
        return true;
        }
    });

尝试android:descendantFocusability将其设置为blocksDescendants = 2。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM