在android中的gridview中拖放图像

2023-12-11

我正在开发一个示例 Android 应用程序来了解 Android 中的拖放操作。在应用程序启动时,我在网格视图上显示一些图像。现在我需要一次将一张图像拖到另一张图像的位置。将一个图像放到另一个图像上后,图像应该交换位置。我怎样才能实现它?请指导/帮助我。


您可以使用 thquinn 轻松实现这一点可拖动的网格视图

您可以添加自定义布局

public class DraggableGridViewSampleActivity extends Activity {
    static Random random = new Random();
    static String[] words = "the of and a to in is be that was he for it with as his I on have at by not they this had are but from or she an which you one we all were her would there their will when who him been has more if no out do so can what up said about other into than its time only could new them man some these then two first may any like now my such make over our even most me state after also made many did must before back see through way where get much go well your know should down work year because come people just say each those take day good how long Mr own too little use US very great still men here life both between old under last never place same another think house while high right might came off find states since used give against three himself look few general hand school part small American home during number again Mrs around thought went without however govern don't does got public United point end become head once course fact upon need system set every war put form water took".split(" ");
    DraggableGridView dgv;
    Button button1, button2;
    ArrayList<String> poem = new ArrayList<String>();

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        dgv = ((DraggableGridView)findViewById(R.id.vgv));
        button1 = ((Button)findViewById(R.id.button1));
        button2 = ((Button)findViewById(R.id.button2));

        setListeners();
    }
    private void setListeners()
    {
        dgv.setOnRearrangeListener(new OnRearrangeListener() {
            public void onRearrange(int oldIndex, int newIndex) {
                String word = poem.remove(oldIndex);
                if (oldIndex < newIndex)
                    poem.add(newIndex, word);
                else
                    poem.add(newIndex, word);
            }
        });
        dgv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
                Toast.makeText(getApplicationContext(), "On clicked" +position, Toast.LENGTH_SHORT).show();
                dgv.removeViewAt(position);
                poem.remove(position);
            }
        });
        button1.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String word = words[random.nextInt(words.length)];
                addView();
                poem.add(word);
            }
        });
        button2.setOnClickListener(new OnClickListener() {
            public void onClick(View arg0) {
                String finishedPoem = "";
                for (String s : poem)
                    finishedPoem += s + " ";
                new AlertDialog.Builder(DraggableGridViewSampleActivity.this)
                .setTitle("Here's your poem!")
                .setMessage(finishedPoem).show();
            }
        });
    }

    public void addView()
    {

        LayoutParams mLayoutParams= new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        LinearLayout mLinearLayout= new LinearLayout(DraggableGridViewSampleActivity.this);
        mLinearLayout.setOrientation(LinearLayout.VERTICAL);
        mLinearLayout.setGravity(Gravity.CENTER_HORIZONTAL);

        ImageView mImageView = new ImageView(DraggableGridViewSampleActivity.this);

        if(dgv.getChildCount()%2==0)
            mImageView.setImageResource(R.drawable.child1);
        else
            mImageView.setImageResource(R.drawable.child2);

        mImageView.setScaleType(ImageView.ScaleType.FIT_XY);
        mImageView.setLayoutParams(mLayoutParams);

        mImageView.setId(dgv.getChildCount());

        mImageView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), v.getId()+"clicked ", Toast.LENGTH_SHORT).show();
                return dgv.onTouch(v, event);
            }
        });


            TextView mTextView = new TextView(DraggableGridViewSampleActivity.this);

            mTextView.setLayoutParams(mLayoutParams);

            mTextView.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), v.getId()+"clicked text ", Toast.LENGTH_SHORT).show();
                    return dgv.onTouch(v, event);
                }
            });

            TextView mTextViewLabel = new TextView(DraggableGridViewSampleActivity.this);

            mTextViewLabel.setText(((dgv.getChildCount()+1)+""));
            mTextViewLabel.setLayoutParams(mLayoutParams);

            mTextViewLabel.setId(dgv.getChildCount());

            mTextViewLabel.setOnTouchListener(new OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    Toast.makeText(getApplicationContext(), v.getId()+"clicked text ", Toast.LENGTH_SHORT).show();
                    return dgv.onTouch(v, event);
                }
            });

            mLinearLayout.setTag(mTextViewLabel);
            mLinearLayout.addView(mTextViewLabel);
            mLinearLayout.addView(mImageView);
            mLinearLayout.addView(mTextView);
        dgv.addView(mLinearLayout);

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

在android中的gridview中拖放图像 的相关文章

  • 当字符串位于数组中时,如何替换字符串中的最后一个字符

    如果某个字符串以某个字符结尾arrayOf X Y Z 我想用新字符替换它A 我不知道该怎么做 我尝试过的一切都不起作用 你可以这样做 var test Some string Z if test lastOrNull in arrayOf
  • Android:处理电话中的语音

    我目前正在寻找有关如何在 Android 上操作音频的选项 目标是在通话期间实时处理来自麦克风的音频 最好的解决方案是在本机调用中执行此操作 但重建一个电话应用程序 无 VOIP 也可以 有没有什么方法可以使用 Android API 来实
  • Android 滚动分页

    Android 操作系统有可以实现滚动分页的功能吗 Edit滚动分页是指像主屏幕上一样的分页 您可以左右滑动并转到下一页或上一页 您可以在 android git kernel org 上查看 Launcher 的源代码作为示例 查找名为
  • android 网格视图从右到左放置项目

    我正在开发一个 Android 应用程序阿拉伯文版本 在其中一个界面中 我有 gridView 因此 要以正确的顺序显示项目 我必须从右到左显示 GridView 中的项目 当然是从上到下 为此 我尝试在 GridView 中添加这些属性
  • 将 APK 移动到 /system/priv-app/ 时出现 java.lang.UnsatisfiedLinkError

    成功调试我的应用程序后 我想将应用程序移动到系统应用程序 以便我可以使用系统权限 例如 REBOOT 和 SET TIME 但是 当将我的 APK 移动到 system priv app 文件夹或将 APK 添加到 ROM 编译中的第三方系
  • 有没有办法有一个屏蔽数字输入字段?

    我正在 Android 上创建一个 HTML5 应用程序 对于这个特定场景 我们有一个用于信用卡安全代码的输入字段 我们希望强制输入字段仅包含数字并被屏蔽 我没有运气搜索这个特定的案例 从我自己研究 尝试中可以看出 这不能纯粹通过 HTML
  • Android 自定义对话框因布局而膨胀 - 对齐问题

    我有一个自定义对话框 它是从dialog xml 中膨胀的 当我打开对话框时 它看起来如下所示 我在列表视图和它下面的 确定 按钮之间有一些空间 我想消除列表视图与其下方的按钮之间的空间 我怎样才能做到这一点 对话框 xml
  • 使用 iOS 分布式应用程序时 Google Cloud Messaging 显示“notRegistered”

    我在 iOS 应用程序上实现了 GCM 服务 我使用 PHP 在服务器上发送 GCM 当应用程序由开发配置文件签名时 它可以完美运行 也就是说 当应用程序使用 GCM 配置注册自身时 它始终返回一个正常运行的设备令牌 我可以使用令牌向设备发
  • OneSignal 推送通知 单击以打开活动

    我集成了一个用于推送通知的信号库 我想在应用程序未运行时通过单击推送通知来打开特定活动 我收到推送通知 但当我单击通知时 应用程序崩溃了 这是我的通知接收器代码 public class ExampleNotificationOpenedH
  • Android - 如何在 ListView 的背景上显示垂直线(并根据行高)?

    如何在背景上显示一条垂直线 如下图蓝色突出显示的那条 在此示例中 我有一个带有 ImageView 元素的 ListView 和 TextView 但它与线条无关 并且我希望这些项目的背景上有一条垂直线 让人感觉它们与每个项目 连接 另请注
  • __stack_chk_fail_local 和 -fno-stack-protector - 如何让它工作?

    Update 我刚刚发现问题出在我的项目 libxml2 中包含的预构建库上 它是在启用堆栈保护的情况下构建的 因此依赖于 stack chk fail local方法 我现在已经重建了该库 fno stack protector也是 一切
  • 为什么 Android 中奇怪的命名约定是“AlertDialog.Builder”而不是“AlertDialogBu​​ilder”

    Why not AlertDialogBuilder builder new AlertDialogBuilder this builder setTitle foo 代替 AlertDialog Builder builder new A
  • Android Studio,工具提示消失得这么快

    我有以下问题 我想从这个工具提示中复制错误文本 但是一旦我将鼠标悬停在它上面 它就消失得如此之快 这让我发疯 我有以下 android studio 版本 我有以下设置 谢谢您的帮助 如果有人遇到这个问题 这与logcat刷新的方式有关 每
  • 没有 GUI 的 Android Activity

    我创建了一个仅从链接启动的活动 使用意图过滤器 我不希望此活动有 GUI 我只希望它启动服务并在栏中放置通知 我尝试将链接的意图过滤器放入我的服务中 但这不起作用 有没有更好的方法可以响应意图过滤器 或者我可以让我的活动没有 GUI 吗 抱
  • 尝试使用 Facebook ID 获取 Facebook 图像时获取空位图

    这是我正在使用的代码 String imageURL Bitmap bitmap null imageURL http graph facebook com fbID picture type try bitmap BitmapFactor
  • Eclipse Oxygen - 该项目未构建,因为其构建路径不完整

    我刚刚安装了 Eclipse Oxygen 并尝试在工作台中打开现有项目 但收到此错误 该项目未构建 因为其构建路径不完整 不能 找到 java lang Object 的类文件 修复构建路径然后尝试 建设这个项目 我尝试右键单击该项目 转
  • Firestore OncompleteListener [重复]

    这个问题在这里已经有答案了 我想看看这段代码的执行有什么错误 当我编译它时 它只返回 log 1 3 2 的值 并且我希望 log2 在 3 之前 Log d 1 antes de validar DocumentReference doc
  • Android 10 通知彩色操作按钮

    I m trying to color the buttons Action in Notification like this So far this is what i m achieved so far 下面是我正在使用的代码 通知服
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • Android Webview:无法调用确定的可见性() - 从未见过 pid 的连接

    我有一个 Android Webview 当我单击链接下载文件 pdf 图像等 时 我收到一条错误消息 Error message Cannot call determinedVisibility never saw a connectio

随机推荐

  • 从变量更新 pom 文件的 Shell 命令

    以前 我使用以下命令获取 pom xml 中的版本并将其从 1 递增 在增量快照版本之前 0 0 1 bin bash version grep ri
  • 如何读取 build.gradle 中 local.properties 中定义的属性

    我已经设定sdk dir and ndk dir in 本地属性 我如何读取值sdk dir and ndk dir in the 构建 gradle file 您可以通过以下方式做到这一点 Properties properties ne
  • Delphi、OLE 和 Microsoft Scheduler 的问题

    我有控制台 Delphi 应用程序 它可以通过 OLE 与 Excell 一起使用 代码示例非常简单 procedure SaveBaseRecordsToFile BaseName string PaymentRecords TPayme
  • 在 RCP 应用程序中添加包资源管理器会导致丢失一些图标

    在我的 eclispe rcp 应用程序中 我添加了一个包资源管理器 添加了 org eclipse jdt ui 当我使用 rcp app 时 当我通过 新建项目向导 创建一个新项目以添加 常规项目 时 该项目已正确创建 但包资源管理器视
  • 文档写入给出了奇怪的输出

    我正在编写一个脚本来检测 jQuery 如果它不存在 则插入 Google CDN 版本和本地后备 不要问为什么 这不是我的想法 问题是当我尝试执行文档时 write 我得到一个奇怪的输出 document write
  • git word-diff-regex 可以处理多行更改吗?

    考虑一个像这样的简单文件 承诺 foo Edited bar 现在 当我跑步时git diff word diff regex a z 它给了我 foo bar 所以 这表明这个词foo已被替换为bar 请注意 分号未标记为已更改 没关系
  • 无法解析:com.android.support:design-v7:27.1.1

    我使用的是Android Studio 3 1 3 Gradle 构建同步失败 我使用了以下方法 但没有用 如果有任何解决方案请告诉我 maven url https maven google com 使重启和缓存无效 multiDexEn
  • 如何在 Android 中的 Facebook 页面墙上发帖?

    您好 我想发布任何消息或链接到 Facebook 页面 我尝试过的是这个 void postInfo try Bundle parameters new Bundle parameters putString message message
  • 使用 angularjs 从服务器下载文件

    我正在寻找一种方法来让用户选择服务器上存在的文件并使用 angularjs 下载它 我发现这段代码不起作用 所以有人有一种正确的方法吗 var content file content var blob new Blob content t
  • PowerShell - 如何使用 $_.Key 作为 $object 属性?

    我有一个像这样的哈希表 hash One One Two Two Three Three 这样做是行不通的 hash getEnumerator foreach object Key Value 然而这句话 hash getEnumerat
  • 使用 gnu clisp 运行 shell 命令

    我正在尝试为 clisp 创建一个 系统 命令 其工作原理如下 setq result system pwd now result is equal to my path here 我有这样的事情 defun system cmd ext
  • json 序列化器 NullValueHandling 不使用 datamember 属性

    在我的 Web api 项目中 现在我正在跳过 null 值 因此 返回 json 会忽略 null 值并打印属性 在 Global asax 文件中 manage the null in the response var json Glo
  • 为Windows窗体中禁用的控件注册MouseEnter/MouseLeave事件?

    我想为禁用的按钮注册 MouseEnter MouseLeave 事件 尽管它确实适用于已启用的按钮 但它不起作用 Enable Disable controls on form load EnableDisableControls Loa
  • C# 中长时间运行任务的进度条

    我的应用程序运行一些可能需要很长时间的数据库查询 在执行这些查询时 我的应用程序似乎冻结了 并且看起来应用程序已停止工作 我需要使用进度条来避免这个问题 但我不确定如何预测查询执行所需的时间 运行查询的代码如下 private void C
  • MySQL加载数据文件-加速?

    有时 我必须为一个项目重新导入数据 从而将大约360万行读取到MySQL表中 目前是InnoDB 但我实际上并不局限于这个引擎 加载数据到文件 已被证明是最快的解决方案 但它有一个权衡 在没有密钥的情况下导入时 导入本身大约需要 45 秒
  • Laravel Controller 不存在,尽管它明显存在

    我收到的错误是控制器不存在 即使我知道它存在 这是代码 路线 php Route get mdpay template array uses gt templateController index templateController bl
  • Angular http get,从 spring mvc 服务器下载文件

    我正在使用 apache commons IOUtils 复制方法将文件从服务器发送到 angularjs 这是我的控制器 RequestMapping value download method RequestMethod GET pub
  • 如何将兰伯特圆锥等角光栅投影更改为纬度 R

    我有一个从 netcdf 获得的栅格 该栅格位于 兰伯特圆锥等角投影 library meteoForecast wrf temporary lt getRaster temp day Sys Date frames complete re
  • 静态下拉到动态下拉 Coldfusion

    我是堆栈溢出的新手 我需要创建一个静态下拉列表 然后根据在静态下拉列表中选择的值创建动态下拉列表 只是 Coldfusion 和 html 没有其他花哨的东西 因此 从第一个下拉菜单中 用户可以选择 颜色 身份证 官员 学校 然后点击 继续
  • 在android中的gridview中拖放图像

    我正在开发一个示例 Android 应用程序来了解 Android 中的拖放操作 在应用程序启动时 我在网格视图上显示一些图像 现在我需要一次将一张图像拖到另一张图像的位置 将一个图像放到另一个图像上后 图像应该交换位置 我怎样才能实现它