所以,我有一个自定义的boardview类extends view。我实现了绘图板,线和绘制“O”时,用户按下单元格可绘制。
但是,我不能正确地实现以下问题:
1。当用户进行按压(多点触摸)时,缩放板视图。
2。如果boardview大于boardview的初始宽度或高度,请将boardview滚动到左、右、上、下。
三。当用户在缩放或滚动后按单元格时,找到正确的单元格坐标。
这是我的第一个游戏项目,如果有人知道如何解决这个问题,请帮助我。
我试过了,但没有正常工作。boardview width等于屏幕宽度,boardview height等于boardview width。这是正方形的板景。
我悬赏200英镑来解决这个问题。
这是我的项目,每个人都可以下载和编辑:https://drive.google.com/file/d/0BxNIUTd_m1x8cUQ2NGpSMDBuVVE/view?usp=sharing
GITHUB:https://github.com/boyfox/GameTicTacToe
boardview代码:http://pastie.org/10109253http://pastebin.com/TRU8Ybds
我找到了自己的解决方案,但需要改进代码,你可以用你的解决方案来回答我的问题!

最佳答案

你能把代码移到github吗?下载、编辑和建议更改会容易得多。
如果你正在寻找一个通用的实现两个手指缩放/旋转,看看我的游戏(https://github.com/ZieIony/Gravity)。最有趣的部分是gamepanel视图和dispatchtouchEvent方法:

private PointF prevPos = new PointF(), prevPos2 = new PointF();
float scale = 1;
final float MIN_SCALE = 0.2f, MAX_SCALE = 2.0f;
float rotation = 0;
Matrix matrix = new Matrix();
private float prevDist;

public boolean dispatchTouchEvent(android.view.MotionEvent event) {
        if (event.getPointerCount() == 2) {
            float d = dist(event.getX(0), event.getY(0), event.getX(1),
                    event.getY(1));
            float pivotX = (event.getX(0) + event.getX(1)) / 2;
            float pivotY = (event.getY(0) + event.getY(1)) / 2;
            float prevPivotX = (prevPos.x + prevPos2.x) / 2;
            float prevPivotY = (prevPos.y + prevPos2.y) / 2;
            if (event.getAction() == MotionEvent.ACTION_MOVE) {
                float newScale = scale * d / prevDist;
                newScale = Math.max(MIN_SCALE,
                        Math.min(newScale, MAX_SCALE));
                float scaleFactor = newScale / scale;
                scale = newScale;

                matrix.postScale(scaleFactor, scaleFactor, pivotX, pivotY);
                float prevAngle = (float) Math.atan2(
                        prevPos.x - prevPos2.x, prevPos.y - prevPos2.y);
                float angle = (float) Math.atan2(
                        event.getX(0) - event.getX(1), event.getY(0)
                                - event.getY(1));
                rotation += prevAngle - angle;
                matrix.postRotate(
                        (float) ((prevAngle - angle) * 180.0f / Math.PI),
                        pivotX, pivotY);

                matrix.postTranslate(-prevPivotX + pivotX, -prevPivotY
                        + pivotY);
            }
            prevPos.x = event.getX(0);
            prevPos.y = event.getY(0);
            prevPos2.x = event.getX(1);
            prevPos2.y = event.getY(1);
            prevDist = d;
        }
        return true;
}

此方法生成一个转换矩阵,应用于绘制。
protected void dispatchDraw(Canvas canvas) {
    canvas.save();
    canvas.setMatrix(matrix);

    // do your drawing here

    canvas.restore();
}

07-27 21:47