Android 拖动阴影的“目标点”如何从其“接触点”移开?

Posted

技术标签:

【中文标题】Android 拖动阴影的“目标点”如何从其“接触点”移开?【英文标题】:How can an Android drag-shadow's 'target point' be displaced from its 'touch point'? 【发布时间】:2013-01-09 16:56:23 【问题描述】:

我正在开发一个应用程序,该应用程序将受益于更精确地控制拖放对象的位置。但对于电容式触摸屏,用户的手指将始终遮挡放置目标。

android 允许通过覆盖View.DragShadowBuilder.onProvideShadowMetrics() 方法来指定拖动阴影上的“接触点”。但似乎没有办法提供一个移位的“目标点”。我想从拖动阴影的接触点投射一个箭头,该箭头可以更精确地操纵到放置目标上。

问题:实现这一目标的最简单/最优雅的方法是什么?

我想我可以在拖动操作期间在屏幕上放置一个不可见的层,该层记录触摸点的坐标,转换它们并将它们发送到实际的放置目标 - 本质上是重新实现拖动事件。但我想知道是否有更简单的解决方案。或者如果其他人以前做过类似的事情。


编辑:这是我想要的那种拖影的粗略模型:

【问题讨论】:

【参考方案1】:

问题:什么是最简单/最优雅的实现方式 这个?

正如您已经看到的,您不能使用View.DragShadowBuilder 类,因为无法将阴影句柄的点和考虑到所有已发送拖动事件的点分开。我也看不到重新实现拖动系统的另一种方法,即使通过扩展 View 类(这会很麻烦)。

我想我可以在拖动过程中在屏幕上放置一个不可见层 注册触摸点坐标的操作, 翻译它们并将它们发送到实际的放置目标 - 本质上是重新实现拖动事件。

那就是one way,如果你没有复杂的拖放要求,这很简单。

但我想知道是否有更简单的解决方案。

您最好扩展基本的 Android 布局(至少是您将使用的布局)并在其中实现拖动逻辑。这样您就无需管理另一层并进行一些额外的计算。我扩展了RelativeLayout 类来实现你can find here 的逻辑。我在Activity like this 中使用了那个类,它有this layout。该示例是基本的,需要更多的工作(和思考)以使其更加灵活并解决一些潜在的问题。

【讨论】:

看起来不错!不过,我想知道,当不可见层方法是一种更通用的解决方案时,扩展一个特定布局(而忽略其他布局)是否真的更好。 --- 无论如何,我至少有两周时间没有时间正确测试您的代码,但您可以得到 +100(在紧要关头;-))。 @mhelvens 在当前布局之上使用层更为通用,因为您不需要扩展其他布局,但它使访问放置目标视图变得更加困难(这将是相当简单的根布局)。我将在本周末研究样品以改进它们。您还有时间来奖励赏金,时间结束后有 24 小时的宽限期。

以上是关于Android 拖动阴影的“目标点”如何从其“接触点”移开?的主要内容,如果未能解决你的问题,请参考以下文章

如何在拖动时隐藏可拖动div的阴影

如何在拖动时删除单元格的阴影?

delphi 7 listview 拖动有阴影 如何解决。

ps怎么做阴影

通过Jquery UI可拖动时应用阴影可排序

Android UI 测试长按拖拽