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

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4)

Android拖放startDragAndDrop拖拽onDrawShadow静态添加xml布局View,Kotlin(4)

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.LayoutInflater
import android.view.View
import android.view.View.OnDragListener
import android.view.View.OnLongClickListener
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivityclass 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 shadow = LayoutInflater.from(this).inflate(R.layout.dnd, null)val builder = MyDragShadowBuilder(shadow)imageView.setOnLongClickListener(object : OnLongClickListener {//长按事件触发拖拽override fun onLongClick(v: View?): Boolean {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, "ACTION_DRAG_STARTED")}DragEvent.ACTION_DRAG_ENTERED -> { //进入imageViewLog.d(TAG, "ACTION_DRAG_ENTERED")}DragEvent.ACTION_DRAG_ENDED -> { //拖放结束Log.d(TAG, "ACTION_DRAG_ENDED")}DragEvent.ACTION_DRAG_EXITED -> { //离开imageViewLog.d(TAG, "ACTION_DRAG_EXITED")}}return true}})}class MyDragShadowBuilder(private var mShadow: View) :View.DragShadowBuilder() {private val width: Int = 400private val height: Int = 400override fun onProvideShadowMetrics(outShadowSize: Point?, outShadowTouchPoint: Point?) {//拖动图像的宽和高outShadowSize?.set(width, height)//手指在拖动图像的位置 中点outShadowTouchPoint?.set(width / 2, height / 2)}override fun onDrawShadow(canvas: Canvas) {mShadow.measure(width, height)mShadow.layout(0, 0, width, height)mShadow.draw(canvas)}}
}

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/card_view"android:layout_width="match_parent"android:layout_height="match_parent"app:cardBackgroundColor="@android:color/holo_green_light"app:cardCornerRadius="20dp"app:cardElevation="0dp"><ImageViewandroid:id="@+id/image"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:scaleType="centerCrop"android:src="@android:drawable/stat_notify_error" /><TextViewandroid:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="top|right"android:layout_margin="10dp"android:background="@android:color/holo_blue_light"android:text="999"android:textColor="@android:color/holo_red_dark"android:textSize="15dp" /></androidx.cardview.widget.CardView>

Android拖放startDragAndDrop拖拽onDrawShadow动态添加View,Kotlin(3)-CSDN博客文章浏览阅读161次。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/134015999

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

http://www.lryc.cn/news/214701.html

相关文章:

  • Servlet 初始化参数(web.xml和@WebServlet)
  • shell_62.shell脚本生成一个标准的 SQL INSERT 语句
  • 华为ICT——第五章语音处理理论与实践
  • ardupilot开发 --- SLAM 篇
  • Elasticsearch:在你的数据上训练大型语言模型 (LLM)
  • 拓展卡尔曼滤波EKF
  • 第四章 应用SysML基本特性集的汽车示例 P2(断更)|系统建模语言SysML实用指南学习
  • Vue入门——核心知识点
  • 使用opencv的tracking模块跟踪目标
  • Debian或Ubuntu静态交叉编译arm和aarch64
  • 最新ai系统ChatGPT程序源码+详细搭建教程+以图生图+Dall-E2绘画+支持GPT4+Midjourney绘画
  • 【设计模式】第16节:行为型模式之“命令模式”
  • 安装pytorch报错torch.cuda.is_available()=false的解决方法
  • 自定义表格的表头根据后端的数据进行筛选是否进行自定义表头添加按钮
  • 海上风电应急救援vr模拟安全培训提高企业风险防范能力
  • 自定义SpringBoot启动图标
  • diffusers-Tasks
  • 文件下载漏洞, 漏洞原理, 测试方法, 漏洞防御, 常见敏感路径
  • 【零参考GAN:Pansharpening】
  • Nacos 注册中心介绍与实操
  • 基于51单片机的智能手机充电器设计
  • nginx 和gateway配置实现动静分离和反向代理
  • 【深度学习实验】网络优化与正则化(二):基于自适应学习率的优化算法详解:Adagrad、Adadelta、RMSprop
  • 系统韧性研究(3)| 工程系统韧性要求
  • .net 5 发布后swagger页面不显示问题
  • Spring Boot 3 整合 xxl-job 实现分布式定时任务调度,结合 Docker 容器化部署(图文指南)
  • 1985-2020年我国30m土地利用覆盖数据介绍
  • Django 社区志愿者管理系统
  • wordpress如何修改数据库里用户ID下一个自增值的开始数字
  • 利用chatgpt大语言模型来做数据预处理