【问题标题】:Problem with SurfaceView and its holderSurfaceView 及其支架的问题
【发布时间】:2011-08-29 11:22:15
【问题描述】:

大家好 我尝试使用 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();
            }
        }
    }

}

请你告诉我是什么问题? 非常感谢

【问题讨论】:

    标签: android


    【解决方案1】:

    在“GalaryView”类中有一个 onDraw() 并在那里绘制你的图形。从线程的 run() 调用 onDraw()。这篇文章有一些示例代码 Android:Crash: Binary XML file line : Error inflating class (using SurfaceView) 。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 2013-04-03
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多