如何在 Android 自定义视图中拖动和对齐项目?

Posted

技术标签:

【中文标题】如何在 Android 自定义视图中拖动和对齐项目?【英文标题】:How to drag and align an item in Android custom view? 【发布时间】:2016-07-26 22:57:57 【问题描述】:

我创建了这个自定义视图来在应用顶部添加一个图层

视图中有一个可拖动的圆圈

public class LockView extends View 

    public LockView(Context context) 
        super(context);
        setClickable(true);
        setBackgroundColor(0x55ff0000);
        setOnClickListener(new OnClickListener() 
            @Override
            public void onClick(View view) 
                ((ViewGroup) getParent()).removeView(LockView.this);
            
        );
    

    @Override
    protected void onDraw(Canvas canvas) 
        super.onDraw(canvas);

        ShapeDrawable circle=new ShapeDrawable(new OvalShape());
        circle.setBounds(10,10,100,100);
        circle.getPaint().setARGB(0xff,0,0xff,0);
        circle.draw(canvas);
    

用法:

LockView lockView = new LockView(this);
WindowManager.LayoutParams baseParams = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);
addContentView(lockView, baseParams);

问题是:

    如何使圆圈可拖动?我找不到任何将监听器设置为圆形的方法。

    如何将圆对齐到右下角?

【问题讨论】:

【参考方案1】:

对于绘制的对象没有这样的监听器。在onDraw() 之后,圆圈是位图的一部分。此外,您不应在 onDraw() 方法中创建对象。要拖动圆圈,您应该重写onTouchEvent() 方法,该方法为您提供有关触摸事件的各种信息。然后你应该保持你的圆圈的位置,这样你就可以比较接触点和你的圆圈。欲了解更多信息,请查看文档:https://developer.android.com/training/gestures

【讨论】:

以上是关于如何在 Android 自定义视图中拖动和对齐项目?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Android Studio 创建自定义视图

具有特定形状的 Android 自定义视图

如何在 android 应用程序中正确对齐自定义字体

UICollectionViewCell 拖动预览的自定义视图

如何将自定义视图拖动为 Xcode 6 中自定义视图的私有属性

如何在我自己的应用程序中获取拖动到 bin 的主屏幕行为?