SurfaceViewを透明化して背景画像を表示しようとしているのですが、
実行すると背景が白くなるだけで、背景が表示されません。
runメソッドで背景を描画し続けることなく、背景を表示させる方法を
教えていただければ幸いです。
XML
1<?xml version="1.0" encoding="utf-8"?> 2<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 tools:context=".MainActivity"> 7 <ImageView 8 android:src="@drawable/backgirl" 9 android:scaleType="fitXY" 10 android:layout_width="match_parent" 11 android:layout_height="match_parent"/> 12 13 <com.example.shootinggame.OverlayCanvas 14 android:id="@+id/surface" 15 android:layout_width="match_parent" 16 android:layout_height="match_parent"/> 17</FrameLayout>
java
1import android.content.Context; 2import android.graphics.Canvas; 3import android.graphics.Color; 4import android.graphics.Paint; 5import android.graphics.PixelFormat; 6import android.graphics.PorterDuff; 7import android.util.AttributeSet; 8import android.view.MotionEvent; 9import android.view.SurfaceView; 10import android.view.SurfaceHolder; 11 12public class OverlayCanvas extends SurfaceView implements SurfaceHolder.Callback , Runnable{ 13 private SurfaceHolder holder; 14 private Thread thread; 15 16 //SurfaceViewの幅と高さ 17 int view_w,view_h; 18 19 public OverlayCanvas(Context context) { 20 super(context); 21 initialize(); 22 } 23 24 public OverlayCanvas(Context context, AttributeSet attrs) { 25 super(context, attrs); 26 initialize(); 27 } 28 29 @Override 30 public void surfaceCreated(SurfaceHolder holder) { 31 this.thread = new Thread(this); 32 //スレッドを開始 33 thread.start(); 34 } 35 36 @Override 37 public void run() { 38 while(thread != null){ 39 doDraw(holder); 40 } 41 } 42 43 private void doDraw(SurfaceHolder holder){ 44 Canvas canvas = holder.lockCanvas(); 45 if(canvas != null){ 46 Paint paint = new Paint(); 47 paint.setColor(Color.BLUE); 48 canvas.drawCircle(100,100,20,paint); 49 holder.unlockCanvasAndPost(canvas); 50 } 51 } 52 53 @Override 54 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 55 this.view_w = width; 56 this.view_h = height; 57 } 58 59 @Override 60 public void surfaceDestroyed(SurfaceHolder holder) { 61 thread = null; 62 } 63 64 65 @Override 66 public boolean onTouchEvent(MotionEvent event) { 67 return true; 68 } 69 70 //初期化 71 private void initialize(){ 72 holder = getHolder(); 73 holder.addCallback(this); 74 holder.setFormat(PixelFormat.TRANSLUCENT); 75 setZOrderOnTop(true); 76 } 77 78}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。