我正在尝试使用Android Studio为我的IDE构建Android游戏。我遇到了障碍,我似乎无法找到很多信息。我正在尝试在我的项目中创建一个支持多向滚动/平移(水平,垂直和对角线)以及缩放缩放的活动。如果您曾经玩过Clash of Clans,那么主要活动就是一个完美的例子。它可以放大和缩小,并在其范围内平移任何方向。
我尝试的事情
1)嵌入式ScrollView
我尝试使用Vertical ScrollView嵌入水平ScrollView(反之亦然),但它不会让我对角滚动。用户体验也非常不稳定。
2)A"修改"滚动型
我已经尝试过"修改"按照此处的建议(two directional scroll view)进行ScrollView,但这并不起作用。它要么没有垂直滚动,要么根本没有工作。
我在StackOverflow和其他网站上看过很多问题,但似乎没有真正的答案。我知道这可以在Unity中完成,但我已经在Android Studio中设置了大部分代码,并且希望能够继续使用它。我在某处读到有人说我需要建立自己的渲染器"但那是我的头脑。
非常感谢任何建议。谢谢。
答案 0 :(得分:0)
您可以覆盖任何布局或ViewGroup以实现此效果。然后将所有视图放在布局中以获得所需的平移/缩放。
您的onDraw或dispatchDraw应如下所示:
@Override
protected void dispatchDraw(Canvas canvas)
{
float[] values = new float[9];
matrix.getValues(values);
canvas.save();
canvas.translate(values[Matrix.MTRANS_X], values[Matrix.MTRANS_Y]);
canvas.scale(values[Matrix.MSCALE_X], values[Matrix.MSCALE_Y]);
super.dispatchDraw(canvas);
canvas.restore();
}
然后你必须设置两个手势探测器来拦截缩放和平移。
@Override
public boolean onTouchEvent(MotionEvent event)
{
matrix.set(savedMatrix);
boolean gestureDetected = mGestureDetector.onTouchEvent(event);
if (event.getPointerCount() > 1)
{
gestureDetected = mScaleGestureDetector.onTouchEvent(event) | gestureDetected;
if (checkScaleBounds())
{
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
matrix.invert(matrixInverse);
savedMatrix.set(matrix);
invalidate();
return gestureDetected;
}
此处提供ZoomLayout的完整代码: https://github.com/maxtower/ZoomLayout/blob/master/app/src/main/java/com/maxtower/testzoomlayout/ZoomLayout.java