为什么我的onTouchEvent从未被解雇?

时间:2014-03-25 08:03:42

标签: android ontouchlistener

我已将myTouchlistener直接设置在RelativeLayout上,但从未调用过。你有什么建议我可能做错了吗?我的代码:

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;
        }
    });

修改

这是我的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>

2 个答案:

答案 0 :(得分:1)

但你在这里做错了。您已经提到需要触及RelativeLayout,但在这里您正在使用

 layout_own_container = new LinearLayout(this); 

表示线性布局。因此,您必须在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;
        }
    });

答案 1 :(得分:1)

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