Как перетащить кнопку из центра макета карты влево, вправо, вверх и вниз в android

Я хочу тащить, тянуть кнопку / представление из центра макета просмотр карты к его смежным сторонам. И представление не должно выходить за пределы представления карты.

Это то, что я делал до сих пор

 <android.support.v7.widget.CardView
    android:layout_width="300dp"
    android:layout_height="300dp"
    app:cardCornerRadius="150dp"
    app:cardElevation="0dp"
    android:gravity="center"
    app:cardBackgroundColor="#50001848"
    android:layout_centerInParent="true">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:gravity="center"
        android:id="@+id/root">
        <ImageView
            android:id="@+id/image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:scaleType="centerCrop"
            android:src="@mipmap/ic_launcher_round"/>
    </RelativeLayout>
</android.support.v7.widget.CardView>

MainActivity.java

    public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    ImageView _view;
    ViewGroup _root;
    private int _xDelta;
    private int _yDelta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        _root = findViewById(R.id.root);


        _view=findViewById(R.id.image);

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(300, 300);
        layoutParams.leftMargin = 50;
        layoutParams.topMargin = 50;
        layoutParams.bottomMargin = 50;
        layoutParams.rightMargin = 50;
        _view.setLayoutParams(layoutParams);

        _view.setOnTouchListener(this);

    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
                _xDelta = X - lParams.leftMargin;
                _yDelta = Y - lParams.topMargin;
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
                layoutParams.leftMargin = X - _xDelta;
                layoutParams.topMargin = Y - _yDelta;
                layoutParams.rightMargin = -50;
                layoutParams.bottomMargin = -50;
                view.setLayoutParams(layoutParams);
                break;
        }
        _root.invalidate();
        return true;
    }
}

Когда я перетаскиваю изображение, оно выходит за пределы круга. Я хочу, чтобы изображение оставалось внутри круга и получило границу круга. Пожалуйста, помогите в этом.

что ты уже испробовал?

Abdul Kawee 10.09.2018 07:08

это не сервис написания кода, пожалуйста, сузьте свой вопрос, разместив код, который вы уже сделали.

V-rund Puro-hit 10.09.2018 07:39
3
2
92
1

Ответы 1

Поместите относительный макет в карточный вид. Тогда внутри относительного макета вы можете сделать это максимально просто.

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

user4520896 10.09.2018 07:13

Это не проблема. Просто поместите относительный макет как дочерний в XML и поместите все представления внутри относительного макета.

user8215153 10.09.2018 07:14

Это то, что я сделал, но как получить границы при перетаскивании (например, когда я перетаскиваю, как я получаю, это левая или правая граница).

user4520896 10.09.2018 07:23

Не могли бы вы дать более подробное объяснение ваших требований?

user8215153 10.09.2018 07:25

Другие вопросы по теме