如何在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中将图像从一个活动发送到另一个活动

翻译Android RecyclerView CardView

如何使我的 Android Swipeable CardView 更像 IOS 7 邮件应用程序(滑动以显示按钮)

Android同时使用cardview图像加载非常懒惰

样式化单选按钮在android中使用cardview

如何在线性布局中将两个 CardView 高度作为 wrap_content