Переместить изображение влево и вправо внутри внешнего круга android

У меня есть два изображения: одно - большой круг, а другое - изображение камеры в центре круга.

Что мне нужно: я могу коснуться изображения камеры, и я хочу двигаться влево и вправо внутри внешнего круга, поэтому, когда я перемещаю изображение камеры влево, я хочу открыть одно действие, а когда я двигаюсь вправо, я хочу открыть другое действие.

img.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) img.getLayoutParams();
            //LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) img.getLayoutParams();
            // TODO Auto-generated method stub
            int eid = event.getAction();
            int x = (int) event.getX();
            int y = (int) event.getY();
            switch (eid) {
            case MotionEvent.ACTION_MOVE:

                x = (int) event.getRawX();      
                mParams.leftMargin = x - 100;
                img.setLayoutParams(mParams);

                y = (int) event.getRawY();
                mParams.rightMargin = y - 100;
                img.setLayoutParams(mParams);
              //  touchMove(x, y);

                break;
            case MotionEvent.ACTION_DOWN:
                //touchStart(x, y);
                    break;
            case MotionEvent.ACTION_UP:
                startDirection = direction;
                break;

            default:
                break;
            }
            return true;
        }

Макет:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

     <RelativeLayout
         android:id="@+id/rectangle"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="49dp"
         android:gravity="center"
         android:paddingLeft="10dp"
         android:paddingRight="10dp"
         android:background="@drawable/outer_circle" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="hello_world"
            android:src="@drawable/camera" />
    </RelativeLayout>

</RelativeLayout>

Когда я запускаю это, он движется влево, но выходит из круга, а когда я двигаюсь вправо, внешний круг растягивается.


person vivek_25    schedule 09.07.2014    source источник


Ответы (1)


Как я вижу, вы даете своему ImageView объект Params типа RelativeLayout. Не могу быть уверен, потому что тип вашей /img/ переменной не виден.

Если вы хотите переместить затронутое представление, вы также можете использовать функции, уже объявленные /v/View varlable, все, что вам нужно сделать, это привести его к ImageView.

Растяжка какая-то странная. Это весь файл макета? Итак, ваш фактический макет — это RelativeLayout с фоном в виде круга?

person Lezli    schedule 09.07.2014
comment
да, Лазли, мой макет является относительным с фоном круга, и да, я хочу переместить imaveview внутри относительного макета. - person vivek_25; 09.07.2014
comment
частный ImageView img; img = (ImageView) findViewById(R.id.imageView1); - person vivek_25; 09.07.2014