我必须遗漏一些明显的东西,因为这个星球上的每个人似乎都能让整个捏缩放的东西发挥作用。主要区别是大多数人似乎都在放大图像,而我有一个带有一堆文本视图的 GridLayout (android-support-v7-gridlayout)。目标似乎很简单:允许用户放大,以便他们可以以更大的尺寸查看整个网格的一部分。
网格画得很好,水平和垂直滚动也很好。然后,当我用手指分开(缩放)做一个两指手势时,尽管收到了 onScale 已被调用的日志消息,但什么也没有发生。当我将两根手指移入(捏)时,所有视图都消失了(尽管我的滚动条在左边)。
我看过矩阵变换,但没有看到这些变换除了图像视图之外的任何东西。
基本布局xml:
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<HorizontalScrollView
android:id="@+id/chooser_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</HorizontalScrollView>
</ScrollView>
然后在活动中
private ZoomGridLayout playerGrid;
在 onCreate 中:
ViewGroup gridParent = (ViewGroup) findViewById(R.id.chooser_layout);
playerGrid = new ZoomGridLayout(getBaseContext());
playerGrid.setRowCount(8);
playerGrid.setColumnCount(8);
LayoutParams layout =
new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
playerGrid.setDetector();
gridParent.addView(playerGrid, layout);
然后我继续向网格中添加约 150 个小文本视图。这是 ZoomGridLayout 的第一次拍摄:
public class ZoomGridLayout extends GridLayout {
private final static String TAG = "ZGL";
private ScaleGestureDetector scaleDetector;
private Context context;
public void setDetector() {
scaleDetector = new ScaleGestureDetector(context, new ScaleGesture());
}
public ZoomGridLayout(Context c) {
super(c);
context = c;
}
@Override
public boolean onTouchEvent (MotionEvent event) {
scaleDetector.onTouchEvent(event);
return true;
}
private class ScaleGesture
extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
@Override
public boolean onScale(ScaleGestureDetector detector) {
Log.v(TAG, detector.toString());
ScaleAnimation scale =
new ScaleAnimation(detector.getPreviousSpan(),
detector.getCurrentSpan(),
detector.getPreviousSpan(),
detector.getCurrentSpan());
scale.setFillAfter(true);
startAnimation(scale);
return true;
}
}
}
这几天我一直在反对这个。我是 Android 编程新手,所以对库不是很熟悉,但我是一位经验丰富的开发人员。任何指针都会很棒。TIA。