Question

I have set my onTouchlistener directly on my RelativeLayout, but it is never called. 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:

<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>
Was it helpful?

Solution

But you are doing wrong here. You have mentioned that you need to touch on RelativeLayout but here you are using

 layout_own_container = new LinearLayout(this); 

means linear layout. So you have to change and find id for your Relative Layout on onCreate() method.

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

OTHER TIPS

Try android:descendantFocusability set it to blocksDescendants = 2.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top