拖放图像视图不起作用

2023-12-23

My RelativeLayout有图像。我只是想让它在整个布局中可拖动。问题是每次我拖放时,它都会回到原始位置。这是我的

拖拽布局.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mainView"
    android:background="@drawable/bg_animation"
    tools:context="com.example.activities.AnimationActivity">
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/ic_launcher"
        android:id="@+id/appLogo"
        android:layout_alignBottom="@+id/ba_cell_animation"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="47dp" />
</RelativeLayout>

动画活动.java

public class AnimationActivity extends ActionBarActivity implements View.OnTouchListener, View.OnDragListener {

    static ImageView mLogo;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);
        setTitle("Animation");
        Typeface mAnimPromptTF = Typeface.createFromAsset(getAssets(), "fonts/Jelloween - Machinato ExtraLight.ttf");
        Typeface mAnimBonusTF = Typeface.createFromAsset(getAssets(), "fonts/Jelloween - Machinato SemiBold Italic.ttf");
        mAnimPrompt = (TextView) findViewById(R.id.anim_prompt);
        mAnimBonus = (TextView) findViewById(R.id.anim_bonus);
        mAnimPrompt.setTypeface(mAnimPromptTF);
        mAnimBonus.setTypeface(mAnimBonusTF);

        mLogo = (ImageView) findViewById(R.id.appLogo);


        mLogo.setOnTouchListener(this);
        findViewById(R.id.mainView).setOnDragListener(this);

    }

    @Override
    public boolean onTouch(View v, MotionEvent e) {
        // TODO Auto-generated method stub
        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
            v.startDrag(null, shadowBuilder, v, 0);
            v.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }
    }

    @Override
    public boolean onDrag(View v, DragEvent e) {
        // TODO Auto-generated method stub

        switch (e.getAction()) {
            case DragEvent.ACTION_DROP:
                View view = (View) e.getLocalState();
                ViewGroup from = (ViewGroup) view.getParent();
                from.removeView(view);
                RelativeLayout to = (RelativeLayout) v;
                to.addView(view);
                view.setVisibility(View.VISIBLE);

                break;

            //the drag point has entered the bounding box of the View
            case DragEvent.ACTION_DRAG_ENTERED:
                break;

            //the user has moved the drag shadow outside the bounding box of the View
            case DragEvent.ACTION_DRAG_EXITED:
                break;

            // the drag and drop operation has concluded.
            case DragEvent.ACTION_DRAG_ENDED:
                break;

            default:


                break;
        }

        return true;
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }
}

我已尝试了以下所有链接,但仍然不知道哪里出错了:

http://www.vogella.com/tutorials/AndroidDragAndDrop/article.html http://www.vogella.com/tutorials/AndroidDragAndDrop/article.html

http://codingjunkie.net/android-drag-and-drop-part1 http://codingjunkie.net/android-drag-and-drop-part1

http://tech-papers.org/android-drag-and-drop http://tech-papers.org/android-drag-and-drop

我真的尝试了很多。


我终于找到了解决方案,请参考以下代码: 就像这段代码一样简单。

@Override
    public boolean onTouch(View v, MotionEvent e) {

        switch (e.getAction()) {
            case MotionEvent.ACTION_DOWN:

                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                v.startDrag(null, shadowBuilder, v, 0);
                return true;
        }

        return false;

    }

    @Override
    public boolean onDrag(View mainView, DragEvent e) {
        View view = (View) e.getLocalState();
        switch (e.getAction()) {
            case DragEvent.ACTION_DROP:
                view.setX(e.getX() - (view.getWidth() / 2));
                view.setY(e.getY() - (view.getHeight() / 2));
                view.invalidate();
                mainView.invalidate();
                return true;
            case DragEvent.ACTION_DRAG_STARTED:
                return true;

            case DragEvent.ACTION_DRAG_EXITED:
                break;

            case DragEvent.ACTION_DRAG_ENDED:
                mainView.invalidate();
                return true;

            default:


                break;
        }

        return true;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拖放图像视图不起作用 的相关文章

随机推荐

  • 如何解构为引用值而不是引用借用?

    如何重写以下内容 将其全部写在函数签名中的一行中 fn process tup mut u32 u32 mut image Luma
  • 如何在服务器端实现firebase云消息传递?

    迁移到 Firebase 后 我测试了使用 Firebase 控制台发送通知 效果很好 但我需要在特定时间每天发送通知 因此我没有使用 Firebase 控制台 而是使用以前的 cron 作业每天发送通知 我变了https android
  • 如何检查字符串是否经过 Base64 编码

    我想解码 Base64 编码的字符串 然后将其存储在我的数据库中 如果输入不是 Base64 编码 我需要抛出一个错误 如何检查字符串是否经过 Base64 编码 您可以使用以下正则表达式来检查字符串是否构成有效的 Base64 编码 A
  • JavaScript 未知错误

    我的代码有问题 过去两天我一直无法解决 function 7 returns the number of times that pattern occurs in string function score string pattern v
  • 如何在 OpenShift 上检测 WebSocket 连接的远程/客户端 IP 地址

    在 OpenShift 云中 通常的 Apache 代理将发送 HTTP 标头x client ip and x forwarded for 我可以用它来确定客户端 IP 但对于较新的代理 这是 WebSocket 用户的唯一选择 http
  • Flask - Active Directory 身份验证[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我制作了一个小型 Flask 应用程序 我希望用户能够使用他们的 Windows NT ID 进行身份验证 我不是 IT 团队的一员
  • 用于独立应用程序 Winforms 的数据库[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JSlider 标签中的工具提示

    我想创建一个带有标签的 JSlider 其中有一个工具提示 JSlider slider new JSlider JLabel label new JLabel First slider setPaintLabels true Hashta
  • redirect_to 和 render 可以互换吗?

    对于下面的代码 如果将redirect to替换为render会发生什么情况 反之亦然 def create product Product new params product respond to do format if produc
  • 如何使用 Yiinitializr 在 Yii 项目中创建友好链接

    我尝试在我的 Yii 项目中使用 Yiinitializr 站点结构 结构如下 root backend standart yii folders www index php admin mysite com common common f
  • JavaScript 有没有办法检测文件是否可以拖放到所使用的设备上?

    我在网站上创建了一个表单 允许用户上传文件 用户还可以将文件拖放到此表单上 但是 在某些设备上 根本无法拖放files 例如在我的 iPhone 上 因此 我只想仅在有意义的设备上显示文本 将文件拖放到此处 有没有办法原则上检测设备是否支持
  • 将多个值传递给单个 PowerShell 脚本参数

    我有一个脚本 我将 args 中的服务器名称传递给该脚本 这样我就可以使用这个 这些 服务器做一些事情foreach script ps1 host1 host2 host3 foreach i in args Do Stuff i 我想添
  • 自定义视图未触发 OnClickListener

    我创建了一个自定义按钮 它是从 XML 布局中扩展出来的 除了未触发点击侦听器之外 一切正常 我怀疑问题是因为android clickable true 属性 因为当我删除它时 会触发点击侦听器 但我需要设置此属性 因为我的自定义视图使用
  • 如何成功安装pyproj和geopandas?

    我尝试通过运行 pip install geopandas 通过 python 安装 geopandas 但这失败了 python setup py Egg info 失败 错误代码为 1 然后是长目录路径 我在网上读到 geopandas
  • 这种网络抓取行为是否合法? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有与网络抓取相关的问题 不幸的是我在这里或谷歌搜索找不到任何答案 好吧 我可能参与了一个项目 站点 B 但不确定它的合法性 因为对我来说
  • 使用 ANALYZE 从零/从头开始重建 PostgreSQL 统计信息的最快方法是什么?

    我有一个 PostgreSQL v10 数据库 大小约为 100GB 重建统计数据最有效 最快 的方法是什么 例如在主要版本升级之后 ANALYZE如果没有参数 默认情况下会更新整个数据库的统计信息 速度慢得令人痛苦 这看起来像是一个单一的
  • 数据类型 datetime 和 time 在大于或等于运算符中不兼容

    我在数据库表的列中有一个变量类型时间 我如何将java中的这个值与这个字段进行比较我的意思是我可以使用日期 公历吗 我已经尝试过了 但仍然有此消息 请有人给我建议 Date d2 new Date timestamp now Calenda
  • 初学者 Unix shell 脚本问题

    我正在做一项由两部分组成的作业 首先 我们被要求创建一个名为 fileType sh 的 shell 脚本 它能够判断文件是 Windows ASCII 类型还是 其他类型 我已经完成了该部分 并将在下面显示它应该执行的操作的示例 file
  • React Native 中的 URI 与 URL

    在react native中可以这样做 const somePath https
  • 拖放图像视图不起作用

    My RelativeLayout有图像 我只是想让它在整个布局中可拖动 问题是每次我拖放时 它都会回到原始位置 这是我的 拖拽布局 xml