Android SurfaceView及其支架存在问题

Android SurfaceView及其支架存在问题,android,Android,大家好 我尝试使用SurfaceView,但视图显示为黑色,没有任何绘制 这里是我的代码 package com.samples; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import androi

大家好 我尝试使用SurfaceView,但视图显示为黑色,没有任何绘制 这里是我的代码

package com.samples;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.Region;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class Galary extends Activity {

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

    }

    private static class GalaryView extends SurfaceView implements Callback {

        private SurfaceHolder surfaceHolder;

        public GalaryView(Context context) {
            super(context);
            surfaceHolder = getHolder();
            surfaceHolder.addCallback(this);
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub

        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            Effects effects= new Effects(surfaceHolder, this);
            effects.start();
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub

        }
    }
}
package com.samples;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Effects extends Thread {
    private SurfaceView surfaceView;
    private SurfaceHolder surfaceHolder;
    private Bitmap bitmap1;
    private Path mPath;
    private Bitmap bitmap2;
    private Paint paint;

    public Effects(SurfaceHolder surfaceHolder, SurfaceView surfaceView) {
        this.surfaceView = surfaceView;
        this.surfaceHolder = surfaceHolder;
        this.mPath = new Path();
        bitmap1 = BitmapFactory.decodeResource(surfaceView.getContext()
                .getResources(), R.drawable.qina1);
        bitmap2 = BitmapFactory.decodeResource(surfaceView.getContext()
                .getResources(), R.drawable.qina2);

        paint= new Paint();
    }

    @Override
    public void run() {
        Canvas canvas = surfaceHolder.lockCanvas();
        canvas.drawColor(Color.WHITE);
        for (int i = 1; i < 100; i++) {
            canvas.drawBitmap(bitmap1, 0, 0, null);
            canvas.save();
            canvas.translate(0, 0);
            mPath.reset();
            canvas.clipPath(mPath);
            int ovalWidth = (int) (surfaceView.getWidth() * (i / 100.0));
            int ovalHeight = (int) (surfaceView.getHeight() * (i / 100.0));
            int ovalX = (surfaceView.getWidth() - ovalWidth) / 2;
            int ovalY = (surfaceView.getHeight() - ovalHeight) / 2;
            mPath.addOval(new RectF(ovalX, ovalY, ovalWidth + ovalX, ovalHeight
                    + ovalY), Path.Direction.CCW);
            canvas.clipPath(mPath, Region.Op.REPLACE);
            canvas.drawBitmap(bitmap2, 0, 0, paint);
            canvas.restore();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}
和第二个文件

package com.samples;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.BlurMaskFilter;
import android.graphics.BlurMaskFilter.Blur;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.Region;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class Galary extends Activity {

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

    }

    private static class GalaryView extends SurfaceView implements Callback {

        private SurfaceHolder surfaceHolder;

        public GalaryView(Context context) {
            super(context);
            surfaceHolder = getHolder();
            surfaceHolder.addCallback(this);
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                int height) {
            // TODO Auto-generated method stub

        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            // TODO Auto-generated method stub
            Effects effects= new Effects(surfaceHolder, this);
            effects.start();
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            // TODO Auto-generated method stub

        }
    }
}
package com.samples;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.graphics.Region;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Effects extends Thread {
    private SurfaceView surfaceView;
    private SurfaceHolder surfaceHolder;
    private Bitmap bitmap1;
    private Path mPath;
    private Bitmap bitmap2;
    private Paint paint;

    public Effects(SurfaceHolder surfaceHolder, SurfaceView surfaceView) {
        this.surfaceView = surfaceView;
        this.surfaceHolder = surfaceHolder;
        this.mPath = new Path();
        bitmap1 = BitmapFactory.decodeResource(surfaceView.getContext()
                .getResources(), R.drawable.qina1);
        bitmap2 = BitmapFactory.decodeResource(surfaceView.getContext()
                .getResources(), R.drawable.qina2);

        paint= new Paint();
    }

    @Override
    public void run() {
        Canvas canvas = surfaceHolder.lockCanvas();
        canvas.drawColor(Color.WHITE);
        for (int i = 1; i < 100; i++) {
            canvas.drawBitmap(bitmap1, 0, 0, null);
            canvas.save();
            canvas.translate(0, 0);
            mPath.reset();
            canvas.clipPath(mPath);
            int ovalWidth = (int) (surfaceView.getWidth() * (i / 100.0));
            int ovalHeight = (int) (surfaceView.getHeight() * (i / 100.0));
            int ovalX = (surfaceView.getWidth() - ovalWidth) / 2;
            int ovalY = (surfaceView.getHeight() - ovalHeight) / 2;
            mPath.addOval(new RectF(ovalX, ovalY, ovalWidth + ovalX, ovalHeight
                    + ovalY), Path.Direction.CCW);
            canvas.clipPath(mPath, Region.Op.REPLACE);
            canvas.drawBitmap(bitmap2, 0, 0, paint);
            canvas.restore();
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}
package.com.samples;
导入android.graphics.Bitmap;
导入android.graphics.BitmapFactory;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Path;
导入android.graphics.RectF;
导入android.graphics.Region;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
公共类效果扩展线程{
私人SurfaceView SurfaceView;
私人地勤人员地勤人员;
私有位图位图位图1;
专用路径mPath;
私有位图bitmap2;
私人油漆;
公共效果(SurfaceHolder SurfaceHolder、SurfaceView SurfaceView){
this.surfaceView=surfaceView;
this.surfaceHolder=surfaceHolder;
this.mPath=新路径();
bitmap1=BitmapFactory.decodeResource(surfaceView.getContext())
.getResources(),R.drawable.qina1);
bitmap2=BitmapFactory.decodeResource(surfaceView.getContext())
.getResources(),R.drawable.qina2);
油漆=新油漆();
}
@凌驾
公开募捐{
Canvas Canvas=surfaceHolder.lockCanvas();
画布。drawColor(颜色。白色);
对于(int i=1;i<100;i++){
drawBitmap(位图1,0,0,null);
canvas.save();
canvas.translate(0,0);
mPath.reset();
帆布。clipPath(百万帕);
int ovalWidth=(int)(surfaceView.getWidth()*(i/100.0));
int ovalHeight=(int)(surfaceView.getHeight()*(i/100.0));
intovalx=(surfaceView.getWidth()-ovalWidth)/2;
int ovalY=(surfaceView.getHeight()-ovalHeight)/2;
mPath.addOval(新矩形)(椭圆形,椭圆形,椭圆形宽度+椭圆形,椭圆形高度
+椭圆形),路径方向(CCW);
canvas.clipPath(mPath,Region.Op.REPLACE);
drawBitmap(位图2,0,0,绘制);
canvas.restore();
试一试{
睡眠(1000);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
你能告诉我有什么问题吗? 非常感谢

在类“GalaryView”中使用onDraw()并在那里绘制图形。从线程的run()调用onDraw()。这篇文章有一些示例代码。希望这有帮助