画像のピンチイン、ピンチアウト

画像のピンチイン、ピンチアウト

これは、Viewの拡大、縮小に使う

画像をピンチイン、ピンチアウトするには
Bitmapクラスと
ScaleGestureDetectorクラスを
メンバ変数に持つ独自Viewクラスを作成する

独自Viewクラスでは、
コンストラクタの実装と
onDraw()
onTouchEvent()
のOverrideをする

まず、

class MyView extends View

でViewを継承

そして、メンバ変数の宣言 

private Bitmap mBitmap;
private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.0f;

そして、コンストラクタの実装

public MyView(Context context){

super(context);
try{
InputStream is = getResources().getAssets().open("test.jpg");
mBitmap = BitmapFactory.decodeStream(is);
}catch(Exception e){
}
mScaleDetector = new ScaleGestureDetector(context, 
new ScaleGestureDetector.SimpleOnScaleGestureListener(){

@Override
public boolean onScale(ScaleGestureDetector detector){

mScaleFactor *= detector.getScaleFactor();
invalidate();
return true;
}
}
);
}

次に、onDraw()の実装

protected void onDraw(Canvas canvas){

canvas.save();

canvas.scale(mScaleFactor, mScaleFactor);

canvas.drawBitmap(mBitmap, 0,0, null);

canvas.restore();
}

そして、onTouchEvent()のOverride

public boolean onTouchEvent(MotionEvent e){
mScaleDetector.onTouchEvent(e);
return true;
}

コンストラクタでは、画像読み込みと
ScaleGestureDetectorクラスの生成をする

ScaleGestureDetectorクラスの
コンストラクタに
SimpleOnScaleGestureListenerクラスをパラメーター指定することで
スケール変更に関するイベントを処理できるようになる

SimpleOnScaleListenerクラスの
onScale()で
スケール計算と
再描画を促すために
Viewクラスのinvalidate()を呼び出す

そして、onDraw()で
スケール設定と
画像の描画を実装

onTouchEvent()では、
ScaleGestureDetectorクラスの
onTouchEvent()を呼び出す

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です