我想做一个简单的控件:一个内部有视图的容器.如果我touch 容器并移动手指,我想移动视图以跟随我的手指.

我应该使用什么样的容器(布局)?怎么做呢?

我不需要使用曲面,而是简单的布局.

推荐答案

比如:

public class MyActivity extends Activity implements View.OnTouchListener {

TextView _view;
ViewGroup _root;
private int _xDelta;
private int _yDelta;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    _root = (ViewGroup)findViewById(R.id.root);

    _view = new TextView(this);
    _view.setText("TextView!!!!!!!!");

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

    _view.setOnTouchListener(this);
    _root.addView(_view);
}

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 = -250;
            layoutParams.bottomMargin = -250;
            view.setLayoutParams(layoutParams);
            break;
    }
    _root.invalidate();
    return true;
}}

main.xml人中只有RelativeLayout人有@+id/root

Android相关问答推荐

如何将Hilt添加到Android Studio中的Kotlin项目中?

我遇到了一个HashMaps对象没有存储在Firebase数据库中的问题.HashMap的一个对象put方法未被存储

使用不同的Google帐户登录

在以XML格式设置完整屏幕视图时可见App Compat按钮

无法将Kotlin序列化添加到Android项目

react 本机生成失败,出现异常.错误:无法确定';<;宏/>;的类型

如何在Android中打印到命令行

在Android中使用Room从SQlite数据库中获取实体列表的正确方式是什么?

LaunchedEffect没有延迟时应用程序崩溃

可以';t将数据插入房间数据库

如何显示具体的商品数量?

从不可组合回调打开可组合屏幕

使用lazyColumn迁移paging3的旧代码

Android 导航 - 定义参数

如何避免多次调用 Jetpack Compose 的 onClick 回调

Kotlin File(path).walkTopDown() 找不到文件

协程中的 Job.Cancel 与 Scope.Cancel 有什么区别?

为什么官方文档用大写字母表示val变量?

如何在 Compose 中更改高程 colored颜色 ?

在 Jetpack Compose 中 Select 要省略的文本