画像のピンチイン、ピンチアウト
これは、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()を呼び出す
—
から送られてきた高速メモ帳