通过屏幕模式(纵向或横向)更改绘图

时间:2011-08-14 08:16:49

标签: android drawing landscape portrait

我正在将游戏从JME移植到Android,我发现了一个恼人的问题。下一个活动必须绘制网格,事实上它确实如此。但是在美化环境中,网格看起来还不错。当您将手机垂直放置(纵向模式)时,它会显得异常压缩。 主要代码是用于绘制单元格行的方法,(getSquareRow) 提前感谢您的帮助。

以下是代码:

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class TraxActivity extends Activity {
    InternalView myView;
    private float shift, di;
    private float n, minim, redux, side;
    boolean first = true;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        myView = new InternalView(this);
        setContentView(myView);
    }

    private class InternalView extends View{
        public InternalView(Context context){
            super(context);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            Paint paint = new Paint();

            n=5;
            di=12;
            int ancho = getWidth();
            int alto = getHeight();
            minim = Math.min(getWidth(), getHeight());
            redux = minim*9/10;
            shift = (getWidth() - redux)/2;
            side = redux/n;

            //background
            paint.setStyle(Paint.Style.FILL);
            paint.setColor(Color.BLUE);
            canvas.drawPaint(paint);

            //grid
            for(int j=0; j < n; j++){
                getSquareRow( canvas, j, paint);
            } 



        }




        public void getSquareRow(Canvas g, int row, Paint p){

            p.setColor(Color.BLACK);
            p.setStyle(Paint.Style.STROKE);
            p.setStrokeWidth(10);

            for(int i=0; i < n; i++){
                g.drawRect(shift+i*side, shift+row*side, side, side, p );
            }

        }




    }
} 

1 个答案:

答案 0 :(得分:0)

谢谢大家,我将瞄准这个游戏只是为了改变土地。虽然我同意alextsc,但在这种情况下看起来Android平台在纵向模式下不能精确重绘。 我不能发布图像,因为我是新手在这里发布的,但运行此代码可以检查异常并且似乎与drawRect方法有关。