Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)

这篇具有很好参考价值的文章主要介绍了Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)

import android.content.ClipData
import android.graphics.Canvas
import android.graphics.Point
import android.os.Bundle
import android.util.Log
import android.view.DragEvent
import android.view.View
import android.view.View.OnDragListener
import android.view.View.OnLongClickListener
import android.widget.FrameLayout
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat

class MainActivity : AppCompatActivity() {
    private val TAG = "fly"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val imageView = findViewById<ImageView>(R.id.image)

        val builder = MyDragShadowBuilder(imageView)
        imageView.setOnLongClickListener(object : OnLongClickListener {
            //长按事件触发拖拽
            override fun onLongClick(v: View?): Boolean {
                Log.d(TAG, "onLongClick")

                val data = ClipData.newPlainText("name", "phil")
                imageView.startDragAndDrop(
                    data,
                    builder,
                    null,
                    0 or View.DRAG_FLAG_GLOBAL or View.DRAG_FLAG_OPAQUE
                )

                return true
            }
        })

        imageView.setOnDragListener(object : OnDragListener {
            override fun onDrag(v: View?, event: DragEvent?): Boolean {
                when (event?.action) {
                    DragEvent.ACTION_DRAG_STARTED -> Log.d(TAG, "DragEvent.ACTION_DRAG_STARTED")
                    DragEvent.ACTION_DRAG_ENTERED -> Log.d(TAG, "DragEvent.ACTION_DRAG_ENTERED")
                    DragEvent.ACTION_DRAG_ENDED -> Log.d(TAG, "DragEvent.ACTION_DRAG_ENDED")
                }

                return true
            }
        })
    }

    class MyDragShadowBuilder(private var mView: View) :
        View.DragShadowBuilder() {

        override fun onProvideShadowMetrics(outShadowSize: Point?, outShadowTouchPoint: Point?) {
            val width: Int = mView.width * 2
            val height: Int = mView.height * 2

            //拖动图像的宽和高
            outShadowSize?.set(width, height)

            //手指在拖动图像的位置 中点
            outShadowTouchPoint?.set(width / 2, height / 2)
        }

        override fun onDrawShadow(canvas: Canvas) {
            val width: Int = mView.width * 2
            val height: Int = mView.height * 2

            val image = ImageView(mView.context)
            image.setImageResource(android.R.drawable.stat_notify_error)
            image.layoutParams = FrameLayout.LayoutParams(width, height)

            val frameLayout = FrameLayout(mView.context)
            frameLayout.setBackgroundColor(
                ContextCompat.getColor(
                    mView.context,
                    android.R.color.holo_green_light
                )
            )
            frameLayout.addView(image)

            frameLayout.measure(width, height)
            frameLayout.layout(0, 0, width, height)
            frameLayout.draw(canvas)
        }
    }
}

图像随着手指拖放滑动:

Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3),Android ,kotlin,android,kotlin

Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder,Kotlin(2)-CSDN博客文章浏览阅读54次。Android DynamicGrid:拖曳交换位置Android DynamicGrid是一个第三方开源项目,DynamicGrid在github上的项目主页是:https://github.com/askerov/DynamicGrid它实现在一个网格布局内,拖曳任意子view实现动态的交换位置,这很类似手机的桌面,手机桌面的图标,均可自由拖曳实现摆放位置的交换,如动图所示:_android 拖拽交换位置。Android View拖拽startDragAndDrop,Kotlin-CSDN博客。https://blog.csdn.net/zhangphil/article/details/134008458

Android View拖拽startDragAndDrop,Kotlin-CSDN博客一个Android手势缩放图片的工具类;Android DynamicGrid:拖曳交换位置Android DynamicGrid是一个第三方开源项目,DynamicGrid在github上的项目主页是:https://github.com/askerov/DynamicGrid它实现在一个网格布局内,拖曳任意子view实现动态的交换位置,这很类似手机的桌面,手机桌面的图标,均可自由拖曳实现摆放位置的交换,如动图所示:_android 拖拽交换位置。但是还有一些遗漏问题尚未解决:垂直方向的拖曳。https://blog.csdn.net/zhangphil/article/details/133994955文章来源地址https://www.toymoban.com/news/detail-719675.html

到了这里,关于Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Android开发之Fragment动态添加与管理

    Android开发之Fragment动态添加与管理

    在 activity_main.xml 中,声明两个按钮备用,再加入一个帧布局,待会儿用来展示Fragment。 用来展示的Fragment,随便找两个AS预设的即可,这里使用的是一个BlankFragment和一个ItemFragment。 BlankFragment: ItemFragment: 在主程序里,我们要实现点击按钮显示不同的Fragment。这里使用一种新

    2024年02月15日
    浏览(6)
  • Android——viewpage2+tablayout+fragment动态添加删除

    Android——viewpage2+tablayout+fragment动态添加删除

    一、简介: 1、添加和删除按钮可动态添加删减tab页面 2、获取每个fragment数据页上的数据 3、为每个数据页赋值 二、 效果图: 三、实现: 主要功能实现:( ViewPage2Fragment.java ) 先初始化适配器 frament数据页(ViewPage2DataFragment.java) 适配器(FragmentStateViewPager2Adapter.java) 主布

    2024年02月16日
    浏览(13)
  • Android10 Settings系列(三)根据需求动态添加删除一级菜单、二级菜单的设置项

    当时遇到定制需求,需要根据实际需要隐藏Settings的菜单项,于是开始了寻找方法 在看了一下源码,经过尝试后,确认生效后,就简单说明一下Settings中布局中主要组成元素 Settings中的菜单项是由 PreferenceScreen 和Preference组成的。其中PreferenceScreen 类似于我们平常使用布局中的

    2024年02月14日
    浏览(53)
  • Vue 实现拖拽模块(一)拖拽添加组件

    Vue 实现拖拽模块(一)拖拽添加组件

    本文主要介绍了vue拖拽组件实现构建页面的简单实现,文中通过示例代码介绍,感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue拖拽添加组件的简单实现,具体如下: 效果图 使用 H5 的新特性拖放操作来实现,拖拽左侧的组件放到右边主体部分,然后主体部分识别拖拽组

    2024年02月10日
    浏览(13)
  • Axure教程—拖拽获取(中继器+动态面板 )

    Axure教程—拖拽获取(中继器+动态面板 )

    本文将教大家如何用AXURE中的中继器和动态面板制作拖拽获取效果 一、效果介绍 如图: 预览地址:https://68e5b3.axshare.com 下载地址:https://download.csdn.net/download/weixin_43516258/87874085?spm=1001.2014.3001.5503 二、功能介绍 拖拽数据从左边到右边 右边数据可删除 三、制作方法 1、拖入横竖

    2024年02月08日
    浏览(8)
  • CloudCompare 二次开发(6)——插件中拖拽添加Qt窗口(区域生长算法为例)

    CloudCompare 二次开发(6)——插件中拖拽添加Qt窗口(区域生长算法为例)

    本文由CSDN点云侠原创,原文链接。爬虫网站自重。   手动拖拽的方式搭建Qt对话框界面的制作流程,以PCL中的点云区域生长算法为例进行制作。 1、将 ....pluginsexample 路径下的 ExamplePlugin 复制一份并修改名字为 CCPointCloudProcess 。 2、创建窗口UI文件 使用任意Qt工程新建对话

    2023年04月11日
    浏览(9)
  • vue3拖拽布局+动态组件+自适应布局

    1.拖拽布局插件 Vue Grid Layout -️ 适用Vue.js的栅格布局系统 可拖动和可调整大小栅格布局的Vue组件。 https://jbaysolutions.github.io/vue-grid-layout/zh/ //在package.json中dependencies下添加下面插件库,并执行命令npm install  \\\"vue-grid-layout\\\": \\\"^3.0.0-beta1\\\",  2.拖拽页面代码 3.图表子组件代码

    2024年02月11日
    浏览(9)
  • draggable + grid 拖拽插件 + 网格布局 动态生成首页模版

    draggable + grid 拖拽插件 + 网格布局 动态生成首页模版

    背景:         1、首页模板由多个子组件组成,如图表、新闻、公告、轮播图等,一般都由前端引入子组件,写在固定的位置上,最终形成一个固定的首页模板;         2、像这样直接在代码中写死的首页没有灵活性,不同用户想展示出来的首页模板千篇一律;        

    2024年02月01日
    浏览(19)
  • Vue2 实现内容拖拽或添加 HTML 到 Tinymce 富文本编辑器的高级功能详解

    Vue2 实现内容拖拽或添加 HTML 到 Tinymce 富文本编辑器的高级功能详解

    在 Web 开发中,Tinymce 被广泛应用作为富文本编辑器。除了基础的文本编辑功能,Tinymce 还提供了一系列高级功能,使得文本编辑更加灵活和便捷。本文将介绍如何在 Tinymce 中实现一些高级功能,并深入了解每个工具的使用。 Tinymce 是一款基于 JavaScript 的富文本编辑器,支持丰

    2024年02月03日
    浏览(71)
  • Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并

    Element table根据字段合并表格(可多字段合并),附带拖拽列动态合并

    效果如图,姓名 数值1 字段进行自动合并 封装合并列js - tableMerge.js 拖拽使用sortablejs 如果拖拽列 要动态生成列 注意不支持行拖拽

    2024年02月11日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包