質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1826閲覧

SurfaceViewの背景を透明化する方法

Shibou

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/05/18 06:59

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

MainActivityのsetContentView(new OverlayCanvas(this))という余計なもののが原因でした。

投稿2020/05/18 08:17

Shibou

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問