当前位置: 首页 > news >正文

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.ContextCompatclass 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 * 2val 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 * 2val height: Int = mView.height * 2val 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 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

相关文章:

  • 多个相同地址的I2C设备,如何挂载在同一条总线上
  • Ansible脚本进阶---playbook
  • Web入门笔记
  • UE5使用Dash插件实现程序化地形场景制作
  • 网关概念及java项目中用使用网关场景
  • Ubuntu系统编译调试QGIS源码保姆级教程
  • 合并两个有序链表(C++)
  • TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
  • 【每日一题Day362】LC274H 指数 | 二分答案
  • iOS_Crash 四:的捕获和防护
  • es之null_value
  • Python——自动创建文件夹
  • 一个基于Excel模板快速生成Excel文档的小工具
  • 23种设计模式(10)——门面模式
  • 在Go中处理时间数据
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • C++类的相互关联
  • HTML中设置input等文本框为不可操作
  • Python_网络编程
  • SpringCloud集成分布式事务LCN (一)
  • Yii源码解读-服务定位器(Service Locator)
  • 大主子表关联的性能优化方法
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​520就是要宠粉,你的心头书我买单
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #Linux(权限管理)
  • (003)SlickEdit Unity的补全
  • (Forward) Music Player: From UI Proposal to Code
  • (LeetCode C++)盛最多水的容器
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)基于IDEA的JAVA基础12
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)德国人的记事本
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ... 是什么 ?... 有什么用处?
  • .chm格式文件如何阅读
  • .naturalWidth 和naturalHeight属性,
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET和.COM和.CN域名区别
  • :如何用SQL脚本保存存储过程返回的结果集
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [1] 平面(Plane)图形的生成算法
  • [AAuto]给百宝箱增加娱乐功能
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android学习笔记]ScrollView的使用
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析