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 拖动阴影的“目标点”如何从其“接触点”移开?的主要内容,如果未能解决你的问题,请参考以下文章