背景のSurfaceViewを赤く塗りつぶして、
前面(オーバーレイ)のSurfaceViewで画像を表示している。
import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PixelFormat; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Context mContext = getApplicationContext(); // 背景になるSurfaceView SurfaceView bkSurfaceview = (SurfaceView) findViewById(R.id.BackSurfaceView); SurfaceHolder holder = bkSurfaceview.getHolder(); MySurfaceViewCallback BkSurfaceViewCallback = new MySurfaceViewCallback(mContext); holder.addCallback(BkSurfaceViewCallback); // オーバーレイするSurfaceView SurfaceView OverLaySurfaceView = (SurfaceView) findViewById(R.id.OverLaySurfaceView); OverLaySurfaceViewCallback OverLaySurfaceViewCallback = new OverLaySurfaceViewCallback(mContext); SurfaceHolder overLayHolder = OverLaySurfaceView.getHolder(); // ここで半透明にする overLayHolder.setFormat(PixelFormat.TRANSLUCENT); overLayHolder.addCallback(OverLaySurfaceViewCallback); } /* * 背景のMySurfaceViewCallback */ public class MySurfaceViewCallback implements SurfaceHolder.Callback { public MySurfaceViewCallback(Context mContext) { // TODO 自動生成されたコンストラクター・スタブ Log.d("タグ", "MySurfaceViewCallback"); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO 自動生成されたメソッド・スタブ Log.d("タグ", "surfaceChanged"); } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO 自動生成されたメソッド・スタブ Log.d("タグ", "surfaceCreated"); // SurfaceViewが作成された時の処理(初期画面の描画等)を記述 Canvas canvas = holder.lockCanvas(); // この間にグラフィック描画のコードを記述する。 // Canvasより取得した領域 int canvasWidth = canvas.getWidth(); //480 int canvasHeight = canvas.getHeight(); Log.d("タグ", String.valueOf(canvasWidth) + "::" +String.valueOf(canvasHeight)); Paint paint = new Paint(); paint.setColor(Color.RED); canvas.drawRect(0, 0, 480, 724, paint); // この間にグラフィック描画のコードを記述する。 holder.unlockCanvasAndPost(canvas); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO 自動生成されたメソッド・スタブ Log.d("タグ", "surfaceDestroyed"); } } /* * オーバーレイのMySurfaceViewCallback */ public class OverLaySurfaceViewCallback implements SurfaceHolder.Callback { private Context ovContext; public OverLaySurfaceViewCallback(Context mContext) { // TODO 自動生成されたコンストラクター・スタブ ovContext = mContext; } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO 自動生成されたメソッド・スタブ } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO 自動生成されたメソッド・スタブ Canvas mCanvas = holder.lockCanvas(); Bitmap image = BitmapFactory.decodeResource( ovContext.getResources(), R.drawable.ic_launcher); mCanvas.drawBitmap(image, 240,50, null); holder.unlockCanvasAndPost(mCanvas); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO 自動生成されたメソッド・スタブ } } }
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/OverLaySurfaceView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <SurfaceView android:id="@+id/BackSurfaceView" android:layout_width="fill_parent" android:layout_height="match_parent" /> </FrameLayout>
0 件のコメント:
コメントを投稿