ダブルクリックして検出
9560 ワード
前のページの内容は、Matrixに使用されて、画像の拡大や縮小、移動を行います。このタイプについてはよく知らないと思いますが、今日はざっと調べてみます。先に前の記事で使用したMatrixクラスの主な方法を一覧表示します。 pblic void set(Matrix src) public void getValues(float[]values) pblic bootlean postScale(float sx、float sy、float px、float py) public bootlean postTranslate(float dx、float dy)Matrixは3 X 3行列で、各要素は一定の幾何学的意味を表しています。例えば、移動、拡大などです。これら9つの要素の定義をソースコードに与えた 。
public static final int MSCALE_X = 0; //!< use with getValues/setValues
public static final int MSKEW_X = 1; //!< use with getValues/setValues
public static final int MTRANS_X = 2; //!< use with getValues/setValues
public static final int MSKEW_Y = 3; //!< use with getValues/setValues
public static final int MSCALE_Y = 4; //!< use with getValues/setValues
public static final int MTRANS_Y = 5; //!< use with getValues/setValues
public static final int MPERSP_0 = 6; //!< use with getValues/setValues
public static final int MPERSP_1 = 7; //!< use with getValues/setValues
public static final int MPERSP_2 = 8; //!< use with getValues/setValues
その中のMSCALE_Xはx軸増幅属性、MTRANS_である。Xはx軸の位置属性です。同理y軸も同じ属性を持っています。これらの要素を配列に組み込んでアクセスできます。Matrix mMatrix = new Matrix();
float[] values = new float[9];
mMatrix.getValues(values);
if(scale*values[Matrix.MSCALE_X]>6)
scale = scale/values[Matrix.MSCALE_X];
上記では、いくつかのよく使われているmethodが挙げられていますが、ここで、public void set(Matrix src)は、Src行列を用いて行列を初期化し、src行列がnullであれば、reet(0)元行列です。public bootlean postScale(float sx、float sy、float px、float py)方法は位置と拡大パラメータに対して設定しましたが、パラメータの変更はこの方法を呼び出すマトリクスの上で行います。setScal(float sx、float sy、float sy、float sy sy、flopx、flopx、float px、flopx、flopx、flopx、flopx、flopx、flopx、flopx、flopx、flopx、flopx、fここで私は彼が行列を呼び出すのを無視して、最初の行列から直接に変化すると理解しています。public bootlean postTranslate(float dx、float dy)とpublic book set Translate(float dx、float dy)もこれらの関係があります。Matrix行列は画像transitionのツールとしてのいくつかの性質が分かりました。下でダブルクリックして画像の元の大きさを回復する機能を実現します。各コンポーネントには自分のオンタッチイベントがありますので、自分のクラスで検出器を定義する必要があります。private GestureDetector mGestureDetector;
oncreate方法で初期化を行います。mGestureDetector = new GestureDetector(this,new GestureListener());
ここでGesture Listenerはあなたが自分で書いた内部カテゴリです。実行されたactionを実行して決定します。private class GestureListener extends GestureDetector.SimpleOnGestureListener {
// private Photo listener;
public GestureListener() {
super();
}
@Override
public boolean onContextClick(MotionEvent e) {
return super.onContextClick(e);
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return super.onDoubleTapEvent(e);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
onDoubleClick();
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public void onShowPress(MotionEvent e) {
super.onShowPress(e);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return super.onFling(e1, e2, velocityX, velocityY);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return super.onScroll(e1, e2, distanceX, distanceY);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return super.onSingleTapUp(e);
}
}
画像の元に戻す動作を行う方法を書きます。ここでは方法がユニークではありません。void onDoubleClick() {
float[] values = new float[] {
1,0,100,
0,1,0,
0,0,1
};
rawMatrix.setValues(values);
photo.setImageMatrix(rawMatrix);
}
public book on Touch(View v、MotionEvent)メソッドで、最後に値を返します。return mGestureDetector.onTouchEvent(event);
これでいいです。