Android 使用drawBitmap()时的视觉缺陷

Android 使用drawBitmap()时的视觉缺陷,android,android-canvas,drawbitmap,Android,Android Canvas,Drawbitmap,它看起来像是在模拟器和手机上。它总是一个被打破的随机方块 下面是来自SurfaceView类的代码,最相关的部分在prepareBackground()中: 代码开始: 公共类MenuBackgroundView扩展了SurfaceView,实现了SurfaceHolder.Callback { private Paint; 私有位图块12X12; 私有布尔绘制=false; 私有上下文ctx; //私人int Begoff; 私人互联网服务主任; 私人国际事务主任; 私有整数mWidth=1;

它看起来像是在模拟器和手机上。它总是一个被打破的随机方块

下面是来自SurfaceView类的代码,最相关的部分在prepareBackground()中:

代码开始:

公共类MenuBackgroundView扩展了SurfaceView,实现了SurfaceHolder.Callback {

private Paint;
私有位图块12X12;
私有布尔绘制=false;
私有上下文ctx;
//私人int Begoff;
私人互联网服务主任;
私人国际事务主任;
私有整数mWidth=1;
私有整数mHweight=1;
私有视图线程mThread;
私有内部calcSizeXY;
公共菜单BackgroundView(上下文、属性集属性){
超级(上下文,attrs);
getHolder().addCallback(此);
mThread=新视图线程(此);
mPaint=新油漆();
mPaint.setColor(Color.RED);
ctx=上下文;
}
公共void doDraw(长时间运行,画布){
画布。drawColor(颜色。蓝色);
如果(抽签)
{
画布.绘图位图(块12X12、offX、offY、mPaint);
}
canvas.drawText(“FPS:+数学圆整(1000f/秒)+”元素:”,10,10,mPaint);
}
公共无效动画(已过很长时间)
{
/*
//经过=经过/10;
offX=(offX+2);
如果(offX>=0)
{
offX-=2*calcSizeXY;
}
offY=(offY+3);
如果(offY>=0)
{
offY-=2*calcSizeXY;
}
//offY=(offY+(int)(已用时间/10f))%calcSizeXY*2//
* 
*///
}
公共空白准备背景()
{

如果(mWidthOk)我算出了,只需让线程休眠1ms:

blocks12x12 = Bitmap.createBitmap(sizeX, sizeY, Bitmap.Config.ARGB_8888);
    Canvas blocks12x12Canvas = new Canvas(blocks12x12);

    for(int i = 0; i < 14; i+=2)
    {
        for(int j = 0; j < 14; j+=2)
        {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            blocks12x12Canvas.drawBitmap(block, (j*calcSizeXY), (i*calcSizeXY), mPaint);
        }
    }
blocks12x12=Bitmap.createBitmap(sizeX、sizeY、Bitmap.Config.ARGB_8888);
Canvas blocks12x12Canvas=新画布(blocks12x12);
对于(int i=0;i<14;i+=2)
{
对于(int j=0;j<14;j+=2)
{
试一试{
睡眠(1);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
blocks12x12Canvas.drawBitmap(block,(j*calcSizeXY),(i*calcSizeXY),mPaint);
}
}
blocks12x12 = Bitmap.createBitmap(sizeX, sizeY, Bitmap.Config.ARGB_8888);
    Canvas blocks12x12Canvas = new Canvas(blocks12x12);

    for(int i = 0; i < 14; i+=2)
    {
        for(int j = 0; j < 14; j+=2)
        {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            blocks12x12Canvas.drawBitmap(block, (j*calcSizeXY), (i*calcSizeXY), mPaint);
        }
    }