如何在android中将一个按钮从cardview布局的中心拖到它的左、右、上和下
Posted
技术标签:
【中文标题】如何在android中将一个按钮从cardview布局的中心拖到它的左、右、上和下【英文标题】:how to drag a button from center of a cardview layout to its left, right, top and bottom in android 【发布时间】:2019-02-14 12:15:58 【问题描述】:我想将一个按钮/视图从卡片视图布局的中心拖动到其相邻边。视图不应超出卡片视图。
这就是我目前所做的
<android.support.v7.widget.CardView
android:layout_
android:layout_
app:cardCornerRadius="150dp"
app:cardElevation="0dp"
android:gravity="center"
app:cardBackgroundColor="#50001848"
android:layout_centerInParent="true">
<RelativeLayout
android:layout_
android:layout_
android:layout_gravity="center"
android:gravity="center"
android:id="@+id/root">
<ImageView
android:id="@+id/image"
android:layout_
android:layout_
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;
当我拖动图像时,图像会离开圆圈。我希望图像留在圆圈内并获得圆圈的边界。请帮助实现这一点。
【问题讨论】:
到目前为止你尝试了什么? 这不是代码编写服务,请通过发布您迄今为止所做的代码来缩小您的问题范围。 【参考方案1】:在卡片视图中放置一个相对布局。 然后在相对布局中你可以很简单地做到这一点。
【讨论】:
我已经做了设计部分。我想实现拖动部分。现在当我拖动它时,它会移出卡片视图并且没有得到边界 这不是问题。只需将相对布局作为子布局放在 XML 中,并将所有视图放在相对布局内。 这就是我所做的,但是如何在拖动时获得边界(比如当我拖动时我如何获得它是左边界或右边界)。 您能否对您的要求进行更多解释?以上是关于如何在android中将一个按钮从cardview布局的中心拖到它的左、右、上和下的主要内容,如果未能解决你的问题,请参考以下文章
翻译Android RecyclerView CardView