Я хочу тащить, тянуть кнопку / представление из центра макета просмотр карты к его смежным сторонам. И представление не должно выходить за пределы представления карты.
Это то, что я делал до сих пор
<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;
}
}
Когда я перетаскиваю изображение, оно выходит за пределы круга. Я хочу, чтобы изображение оставалось внутри круга и получило границу круга. Пожалуйста, помогите в этом.
это не сервис написания кода, пожалуйста, сузьте свой вопрос, разместив код, который вы уже сделали.
Поместите относительный макет в карточный вид. Тогда внутри относительного макета вы можете сделать это максимально просто.
Я уже сделал часть дизайна. Я хочу получить часть перетаскивания. теперь, когда я перетаскиваю, она выходит из представления карты и не получает границы
Это не проблема. Просто поместите относительный макет как дочерний в XML и поместите все представления внутри относительного макета.
Это то, что я сделал, но как получить границы при перетаскивании (например, когда я перетаскиваю, как я получаю, это левая или правая граница).
Не могли бы вы дать более подробное объяснение ваших требований?
что ты уже испробовал?