关于DragShadowBuilder无法显示阴影问题探究

Android移动视图处理:实现与实战指南 在移动开发中,特别是在Android平台上,拖放是一个非常直观和重要的用户交互方式。通过拖放,用户可以轻松地在屏幕上的不同位置或不同的视图之间移动数据和对象。类在Android中的拖放操作中扮演着至关重要的角色。它用于定义拖动操作时显示的阴影图像。这个阴影是用户拖动视图时,视图的一个可视化表示,它帮助用户理解正在拖动的是什么,并且可以在屏幕上跟踪拖动操作。提供了自定义拖动阴影外观和行为的能力,这在设计应用界面时提供了极大的灵活性。 阅读详情

DragShadowBuilder是新版安卓拖放时的一个辅助类,是在手势拖动的时候动态显示拖动的阴影,这个阴影可以放置图片,也可以自己用画布画


构造方法

View.DragShadowBuilder(View):

这个构造器接收任意的应用程序的View对象。这个构造器把View对象保存在View.DragShadowBuilder对象中,以便在回调期间访问这个View对象,来构造拖拽影子。它(View对象参数)不必跟用户选择的开始拖拽操作的View对象相关联。

如果使用这个构造器,就不必扩展View.DragShadowBuilder类或覆写它的方法。默认情况,你会获得一个跟传递给构造器的View对象外观相同的拖拽影子。在用户的触屏位置下方,以出点为中心显示。

View.DragShadowBuilder():

如果使用这个构造器,在ViewDragShadowBuilder对象中没有有效的View对象。默认情况下,如果使用这个构造器,并且没有扩展View.DragShadowBuilder类或覆写它的方法,那么就会获得一个不可见的拖拽影子,系统不会给出错误。


相关的翻译已经有很多,但是不知道为什么没有去实验一下,反正我的实验结果是单纯的用View.DragShadowBuilder(View)是无法显示阴影的,当然我传入的是imageview,然后我就去stackoverflow上搜索,果然也有人有相同问题

链接http://stackoverflow.com/questions/11757115/why-dragshadowbuilder-doesnt-show-imageview


下面的有一种猜测:ImageView is not being drawn until it is added to a layout

所以解决方案为重写DragShadowBuilder传入一个位图,自己画

public class LJDragShadowBuilder extends View.DragShadowBuilder {

   private Bitmap image; // image to draw as a drag shadow

   public LJDragShadowBuilder(Bitmap _image) {
      super();
      image = _image;
   }

   public void onDrawShadow(Canvas canvas)
   {
      canvas.drawBitmap(image, 0, 0, null);
   }

   public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint)
   {
      shadowSize.x = image.getWidth();
      shadowSize.y = image.getHeight();
      shadowTouchPoint.x = shadowSize.x / 2;
      shadowTouchPoint.y = shadowSize.y / 2;
   }
}
这个方法我证实过可行,同时研究android给的例子可以看到,它也是继承一个自己画的,跟传进来的view没半毛钱关系,只是super给父类了。。。

private static class MyDragShadowBuilder extends View.DragShadowBuilder {

    // The drag shadow image, defined as a drawable thing
    private static Drawable shadow;

        // Defines the constructor for myDragShadowBuilder
        public MyDragShadowBuilder(View v) {

            // Stores the View parameter passed to myDragShadowBuilder.
            super(v);

            // Creates a draggable image that will fill the Canvas provided by the system.
            shadow = new ColorDrawable(Color.LTGRAY);
        }

        // Defines a callback that sends the drag shadow dimensions and touch point back to the
        // system.
        @Override
        public void onProvideShadowMetrics (Point size, Point touch)
            // Defines local variables
            private int width, height;

            // Sets the width of the shadow to half the width of the original View
            width = getView().getWidth() / 2;

            // Sets the height of the shadow to half the height of the original View
            height = getView().getHeight() / 2;

            // The drag shadow is a ColorDrawable. This sets its dimensions to be the same as the
            // Canvas that the system will provide. As a result, the drag shadow will fill the
            // Canvas.
            shadow.setBounds(0, 0, width, height);

            // Sets the size parameter's width and height values. These get back to the system
            // through the size parameter.
            size.set(width, height);

            // Sets the touch point's position to be in the middle of the drag shadow
            touch.set(width / 2, height / 2);
        }

        // Defines a callback that draws the drag shadow in a Canvas that the system constructs
        // from the dimensions passed in onProvideShadowMetrics().
        @Override
        public void onDrawShadow(Canvas canvas) {

            // Draws the ColorDrawable in the Canvas passed in from the system.
            shadow.draw(canvas);
}
}
你看它画的是drawable,跟传进来的view有半毛钱关系么。。。


希望有大牛能够进来指教一下

DragShadowBuilder(拖拽拼图) 这个DragShadowBuilder(拖拽拼图),相当的屌啊,后续添加拽到某个view上时,该view高亮并放大。 立即下载

相关推荐

el-transfer和el-tree进行结合搞一个树形穿梭框

由于业务需求需要在穿梭框里使用树形结构,但是本身element里并不支持,于是参考了别的大佬发的文章作为思路及后续自己新增了一些处理功能。

bbkhhvv的博客 6306

拖动视图,DragShadowBuilder使用

首先自定义一个view继承ImageViewpackage com.example.dragview;import android.animation.Keyframe; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.annotation.S

cyinclude的博客 3463

sentaurus学习笔记(HFET_pGate_GaN仿真)(五)

`(sdedr:define-constant-profile`和`(sdedr:define-constant-profile-region`命令用于定义并应用一个恒定的活性硼掺杂浓度剖面`"ndop_GaN_gate_const"`到氮化镓栅极层上,其值为`NpGaN_gate`。- `"Oxide"`指定了这一层的材料名称(在这里代表氧化层),而`"nucleation"`是这一层在仿真中的标识名称。- `"GaN"`指定了这一层的材料名称,而`"GaN_gate"`是这一层在仿真中的标识名称。

qq_52640792的博客 940

自定义实现 View.DragShadowBuilder 设置拖拽视图的大小

自定义拖拽视图的大小

fengyeNom1的博客 752

实战:GMTSAR软件处理陆探一号SAR数据

摘要:陆探一号(LT-1)是我国首组L波段差分干涉SAR卫星星座,具备全天候多极化成像能力,主要服务于自然资源监测等领域。文章详细介绍了其轨道参数(607km太阳同步轨道)和传感器技术指标(5种成像模式)。同时阐述了开源InSAR处理软件GMTSAR的安装方法(基于Ubuntu系统)及实验流程,包括数据准备、DEM生成和干涉处理步骤,特别说明了轨道数据缺失时的MATLAB插值处理方法。该研究为国产SAR卫星数据处理提供了技术参考。

一个RSer的博客 1034

华为2019秋招笔试Java实现(2)

华为2019秋招笔试Java实现(2) 笔试日期2019年8月14日 第二题(200分) 题目描述 某程序员小A,有一种表格数据需要存储在文件中。表格中的每一行,由若干个字段组成,每个字段可以是整数或字符串(字符串只包含数字、字母以及特殊字符!@#%^&*()",)。小A设计了一种存储格式,采用文本的方式对表格数据进行存储。文本文件中的每一行,代表了表格数据中的一行数据。具体格式描述如下: 1、采用逗号分隔不同的字段(逗号前后无空格); 2、数字直接采用10进制的文本存储; 3、字符串的存储规则如下

hewhys的博客 1549

Android界面导航之拖放框架(Drag and Drop),大厂面试必备

最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!这里附上我整理的几十套腾讯、字节跳动,京东,小米,头条、阿里、美团等公司19年的Android面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。由于篇幅有限,这里以图片的形式给大家展示一小部分。

2301_76348344的博客 522

【硬件设计】_基于STM32单片机的智能台灯系统

智能台灯系统是一款多功能的智能照明设备,能够自动调节亮度、监测人体活动、感知环境光照,并具备定时和报警功能,极大提升了用户体验与功能的灵活性,主要包括以下功能:系统提供自动和手动两种模式以调节台灯亮度。在自动模式下,台灯会根据周围光强智能调整;而在手动模式下,用户可通过按键自行设置亮度。利用红外光电开关检测台灯与用户之间的距离,若距离过近,系统将发出报警提示。通过时钟模块设置定时提醒,并在OLED显示屏上显示当前时间,当达到设定的定时时间时,蜂鸣器将发出报警音。

2401_85381181的博客 1731

拖拽拼图游戏DragShadowBuilder

上图: 代码如下: public class MyDragShadowBuilder extends View.DragShadowBuilder { // 拖动阴影的区域 private static Drawable shadow; // 储存绘制的拖动阴影图像 private static Bitmap newBitmap; publ...

疾风剑豪 1234

卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新; 用数学公式表示,如下: 状态预测:(1) 其中,X(k|k)是k时...

sunlin972913894的博客 2万+

伺服系统控制原理深度解析

摘要:本文系统阐述了伺服系统的控制原理与应用。首先介绍了伺服系统的定义、组成及其在工业自动化中的重要性;然后详细分析了反馈控制机制、稳定性判据和性能指标;重点推导了传递函数和状态空间两种数学模型,并通过LaTeX公式展示了二阶系统建模过程;进而对比了PID控制、状态反馈及自适应控制等方法的优缺点;最后结合数控机床等案例,验证了理论方法的有效性,并展望了伺服系统智能化发展趋势。全文兼顾理论深度与实践指导性,为控制工程领域提供了系统的技术参考。

技术工作者 1266

android 阴影大小,android dragshadowbuilder阴影大小

嗯,这在文档中并不是那么清楚.我正在使用给定的构建器来减小大小,你只需要通过乘以你的条件来改变除法;private static class MyDragShadowBuilder extends View.DragShadowBuilder {private Point mScaleFactor;// Defines the constructor for myDragShadowBuilder...

weixin_42524308的博客 477

halcon知识:常见三种模板匹配方法总结

halcon的三种模板匹配方法总结,halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。 先要补充点知识:形状匹配常见的有四种情况 一般形状匹配模板shape_model、线性变

gongdiwudu的专栏 4万+

自定义DragShadowBuilder拖拽视图(放大拖拽图片)

自定义 MyDragShadowBuilder 继承 View.DragShadowBuilder public class MyDragShadowBuilder extends View.DragShadowBuilder { private Point mScaleFactor; public MyDragShadowBuilder(View arg0) { ...

m0_38031291的博客 1440

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

区分View.DragShadowBuilder 的shadow位置和落点位置

前置条件:View.DragShadowBuilder 的shadow的手指位置和onDragEvent落点位置是一致的,不够遇到需要手指不能挡住阴影的需求的话可以用反射处理 dropX和dropY是你要落下的点,这样就可以不需要变动到其他逻辑 Field mX = event.getClass().getDeclaredField("mX"); mX.setAccessible(true);...

Fred 855

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android View拖拽/拖放DragAndDrop自定义View.DragShadowBuilder,Kotlin(2)

Android DynamicGrid:拖曳交换位置Android DynamicGrid是一个第三方开源项目,DynamicGrid在github上的项目主页是:https://github.com/askerov/DynamicGrid它实现在一个网格布局内,拖曳任意子view实现动态的交换位置,这很类似手机的桌面,手机桌面的图标,均可自由拖曳实现摆放位置的交换,如动图所示:_android 拖拽交换位置。Android View拖拽startDragAndDrop,Kotlin-优快云博客。

Zhang Phil 1546

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android 拖拉控件遇到的问题

第一次写博客,写得不好不要见怪,今天主要说说 拖拉控件,希望和大家交流下。 废话不多说,进入正题。Android 提供了拖拉控件的接口,主要是  View.DragShadowBuilder类 和View.OnDragListener接口 。DragShadowBuilder类主要是关于阴影部分的描叙,而OnDragListener 接口可以监听拖动状态的。 一般的控件例如TextVi

qq_25984015的博客 1562

【Android】View.startDragAndDrop

1,概述 原生api,提供跨进程拖拽数据,需提供剪切板、DragShadowBuilder等参数。 简单理解,调用该方法会在系统层次上生成阴影,默然与拖拽view大小相同,阴影中心位置与触摸点重合。 2,核心方法 public final boolean startDragAndDrop(ClipData data, DragShadowBuilder shadowBuilder, Object myLocalState, int flags) { ...... }...

qq_40900926的博客 2670

android+弹窗锚点,拖动视图时设置自定义锚点

我正在使用Android拖放API,并尝试将拖动阴影的锚点设置为在View中进行触摸的点。 dafault行为是将锚点放在View的中间。我做了一些研究,似乎可以通过覆盖DragShadowBuilder类中的onProvideShadowMetrics (Point shadowSize, Point shadowTouchPoint)方法来DragShadowBuilder 。 根据我的理解...

weixin_42465030的博客 468

Android拖拽功能基础(startDragAndDrop)

学习目标: 提示:这里可以添加学习目标 例如:一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 1、 搭建 Java 开发环境 2、 掌握 Java 基本语法 3、 掌握条件语句 4、 掌握循环语句 学习时间: 提示:这里可以添加计划学习的时间 例如: 1、 周一至周五晚上 7 点—晚上9点 2、 周六上午 9 点-上午 11 点 3、 周日下午 3 点-下午 6 点 学习产出: 提示:这里统计学习计划的总量 例如: 1、 技术笔记 2 遍 2、优快云 技术博客 3 篇

gujiaodudu的专栏 8530

Android - 开发实例(10):让控件变得可拖拽

其实要实现拖拽的控件是非常简单的事情,和让控件支持点击一样简单!我们只需要对View类的 onDragEvent() dispatchDragEvent() setOnDragListener() 进行封装就行了,是不是和触摸事件的回调差不多呢? onTouchEvent() dispatchTouchEvent() setOnTouchListener() 所以其用法和处理触摸事

刘云龙、的程序世界 2835

在android4.0中实现View的拖动效果

在android4.0中实现View的拖动效果

枫轻舞云飘散 3671

拖放 Drag and drop

拖放 Drag and drop android11-release Android Developers > Docs > Guides Drag and drop Android 开发者 > 文档 > 指南 拖放 View.OnDragListener 实现 View.OnDragListener 的拖动事件监听器或其 onDragEvent(DragEvent) 回调方法来接收拖动事件 拖放过程中四种状态:开始、继续、放下、结束 Drag and drop 监听拖拽事件D

许浑的博客 1257

Android拖放startDragAndDrop拖拽Glide灵活加载堆叠圆角图,Kotlin(6)

文章浏览阅读1k次。可以利用androidx.cardview.widget.CardView的cardCornerRadius特性,将CardView改造成一个圆形的View,技术实现的关键首先设定CardView为一个宽高相等的View(正方形),然后将radius特意设置成宽度(或高度,一样,因为正方形,宽高相等)的1/2,此时CardView自然就变成一个圆。_android 圆形view。这次,现在改造文章(5)中的实现,实现低代码、灵活加载旋转的堆叠图。

Zhang Phil 1996

Android界面导航之拖放框架(Drag and Drop)

以前一直是自己在网上东平西凑的找,找到的东西也是零零散散,很多时候都是看着看着就没了,时间浪费了,问题却还没得到解决,很让人抓狂。后面我就自己整理了一套资料,还别说,真香!资料有条理,有系统,还很全面,我不方便直接放出来,大家可以先看看有没有用得到的地方吧。加入社区》https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac081828384858687888990919293949596979899。

2401_87029397的博客 686

Android小Demo——OnDragListener

drag and drop 小demo

小小桐的专栏 4878
上一篇: 简单实现一下celllayout布局
下一篇: HTML5定稿了,为什么原生App世界将被颠覆
思想的苇草
博客等级 码龄15年 35粉丝 20原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值