ダブルクリックして検出


前のページの内容は、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);
    これでいいです。