画像のピンチイン、ピンチアウト
これは、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()を呼び出す