背景の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 件のコメント:
コメントを投稿