想要的效果,,我有一堆小图片,我想要显示在“墙壁”,然后让用户抛向任何方向,并选择一个图像。
Initial Idea作为一种可能的实现--我认为一个比屏幕还大的GridView可以显示--但是使用这个小部件的所有例子都表明,图片库并没有超出屏幕的大小。
问题,实现所需效果的最佳小部件是什么?代码示例将特别有益。
编辑.,如果有人有示例代码,可以让我把大约30幅图片放在“墙上”(表很好),那么我会接受这个答案。请注意,“墙”应该看起来像是超出了显示的边缘,并允许用户使用手指将“墙”拖向左向右。拖动应以“自由形式”模式进行。在图像上的一个点击选择它和回调应该是可检测的。我已经为这个解决方案创造了一笔奖金。
发布于 2011-10-11 22:42:15
解决办法其实很简单,但很痛苦。我必须在我最近做的一个程序中实现这一点。有一些棘手的事情,但你必须绕开。必须指出,不同的操作系统版本有不同的经验。要完成这项工作,需要一定的专业知识或排他性,因为绘图有时会受到这种方法的不利影响。虽然I有一个工作副本,但我提供的代码并不是为每个人提供的,并且会受到代码中进行的任何其他更改或自定义的影响。
android:layout_width设置为wrap_contentandroid:layout_height设置为wrap_contentsetStretchMode(NO_STRETCH);setNumColumns(列数);setColumnWidth(显式宽度(以像素);为单位)
scrollBy()中简单地使用onTouchEvent()
这些是步骤。所有这些都是为了让它发挥作用而需要的。关键是具有特定宽度的显式列数的NO_STRETCH。如果您需要澄清,可以提供更多的详细信息。您甚至可以使用VelocityTracker或onFling来处理抛出。我的snappingToPage已经启用了。使用此解决方案,甚至不需要覆盖onDraw()或onLayout()。这三行代码消除了对WebView或任何其他嵌入或嵌套的需求。
双向滚动也很容易实现。下面是一个简单的代码解决方案:
当然,这个解在X和Y同时移动。如果你想一次只移动一个方向,你可以很容易地通过检查X和Y之间的差异来区分。(即Math.abs(deltaX) > Math.abs(deltaY))下面是一个方向滚动的部分样本,但可以在X方向或Y方向之间切换。
3b。如果您想一次处理一个方向,请在OnTouch()中更改此操作:
case MotionEvent.ACTION_MOVE:
if (myState == TOUCH_STATE_SCROLLING)
{
//This will update the vars as long as your finger is down.
final int deltaX = (int) (myLastX - x);
final int deltaY = (int) (myLastY - y);
myLastX = x;
myLastY = y;
// Check which direction is the bigger of the two
if (Math.abs(deltaX) > Math.abs(deltaY))
scrollBy(deltaX, 0);
else if (Math.abs(deltaY) > Math.abs(deltaX))
scrollBy(0, deltaY);
// We do nothing if they are equal.
}
break;FuzzicalLogic
发布于 2011-05-07 01:08:17
GridView可以有超出屏幕大小的内容,但只能在垂直方向扩展。
问题:实现所需效果的最佳小部件是什么?
这些不是实现2D滚动的默认小部件(至少在3.0之前)。它们都只实现一维(单向滚动)。不幸的是,解决你的问题并不是那么容易。
你可以:
TableLayout类中放置一个ScrollView,并自己处理触摸事件。这将允许您执行正确的2D平移操作,但对于大型数据集则不太好,因为不需要回收视图。GridView以启用水平滚动功能(如果可以的话,可能是最好的解决方案)TableLayout放入ScrollView (使用layout_width="wrap_content),并将其放入HorizontalScrollView中--尽管这可能有效,但这并不是最佳的解决方案发布于 2011-05-12 12:55:40
我认为这方面唯一的Android原生解决方案是有一个嵌入式WebView,您可以在其中拥有二维滚动(顺便说一句,这是唯一具有这种功能的东西)。
在按下图像时,可以通过从JavaScript到JAva的回调来控制行为。
这不是很“漂亮”但是..。这是唯一可行的方式来做你想要的“开箱即用”。
https://stackoverflow.com/questions/5918412
复制相似问题