Viewの基礎知識:

4526 ワード

Viewの位置パラメータ:
viewの位置は主に4つの頂点によって決定される:top,left,right,bottom対応:
top = getTop();
left = getLeft();
right = getRight();
bottom =getBottom();

同時にviewの幅とそれに対応する関係を得ることができます.
with = right -left;
height = bottom -top ;

Android 3.0には、x,y,translationX,translationY x,yがView左上隅の座標に対応して追加されています.translationXおよびtranslationYは、親コンテナに対するViewの左上隅のオフセットです.
x = left + translationX ;
y = top +translationY ;

MotionEvent
  • ACTION_DOWN
  • ACTION_UP
  • ACTION_MOVE
  • ACTION_OUTSIDE
  • ACTION_CANCEL:他はよく理解していますが、これは理解しにくいです.一般的には父のViewが事件をブロックして、この
  • を歩きます.
    TouchSlop
    システムがスライド操作と認識できる最小距離を指し、機種によって異なる場合があり、コードで取得できる.
    ViewConfiguration.get(this).getScaledTouchSlop();
    

    Velocity Tracker
    これは一見現在のスライド速度を取得するために使用されるので、onTouchEventメソッドで一般的に使用されるべきである.初期化方法:
    VelocityTracker velocityTracker = VelocityTracker.obtain();
    

    速度トラッカーが作成されたのは明らかですが、追跡イベントを設定する必要があります.
    velocityTracker.addMovement(event);
    

    現在の速度を取得するAPIを見てみましょう.
      
        public void computeCurrentVelocity(int units) ;
    
        
        public void computeCurrentVelocity(int units, float maxVelocity);
    

    速度=距離/時間帯なので、上記では現在の速度を取得する際に、この時間帯をms単位で設定する必要があります.第2パラメータに置くと測定可能な最大速度(maxVelocity)を設定します.
    現在のスライドイベントを取得する速度は、実際には、この期間内にどれだけの画素数が割り当てられたかを計算することです.
    平面上の速度はx,y方向を含む:
     float xVelocity = velocityTracker.getXVelocity();
     float yVelocity = velocityTracker.getYVelocity();
    

    使い終わったら回収をリセットする必要があります.
     velocityTracker.clear();
     velocityTracker.recycle();
    

    GestureDetector
    クリック、ダブルクリック、長押し、スライドなどの動作を検出します.
    public GestureDetector(Context context, OnGestureListener listener) ;
    

    以上の方法から,GestureDetectorを作成する際にGestureListenerのインスタンスを渡す必要があることが分かる.ソースコードを見ていくつかのListenerが送信できます:OnGestureListener:
     public interface OnGestureListener {
    
          
            boolean onDown(MotionEvent e);
    
            
            void onShowPress(MotionEvent e);
    
            
            boolean onSingleTapUp(MotionEvent e);
    
            
            boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY);
    
            
            void onLongPress(MotionEvent e);
    
           
            boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
        }
    
    

    注意:void onShowPress(MotionEvent e);指で画面を軽くタッチし、まだ離したりドラッグしたりしていないので、onDown()との違いに注意する必要があります
    OnDoubleTapListener:
     public interface OnDoubleTapListener {
           
           
            boolean onSingleTapConfirmed(MotionEvent e);
     
           
            boolean onDoubleTap(MotionEvent e);
    
            
            boolean onDoubleTapEvent(MotionEvent e);
        }
    

    注意:boolean onSingleTapConfirmed(MotionEvent);トリガーされると、その後に別のクリック動作が続くことはありません.つまり、今回はクリックのみ可能であることを保証します.
    OnContextClickListener:
      public interface OnContextClickListener {
            
            boolean onContextClick(MotionEvent e);
        }
    

    SimpleOnGestureListener:
    public static class SimpleOnGestureListener implements OnGestureListener, OnDoubleTapListener,
                OnContextClickListener {
    
            public boolean onSingleTapUp(MotionEvent e) {
                return false;
            }
    
            public void onLongPress(MotionEvent e) {
            }
    
            public boolean onScroll(MotionEvent e1, MotionEvent e2,
                    float distanceX, float distanceY) {
                return false;
            }
    
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                    float velocityY) {
                return false;
            }
    
            public void onShowPress(MotionEvent e) {
            }
    
            public boolean onDown(MotionEvent e) {
                return false;
            }
    
            public boolean onDoubleTap(MotionEvent e) {
                return false;
            }
    
            public boolean onDoubleTapEvent(MotionEvent e) {
                return false;
            }
    
            public boolean onSingleTapConfirmed(MotionEvent e) {
                return false;
            }
    
            public boolean onContextClick(MotionEvent e) {
                return false;
            }
        }
    

    SimpleOnGestureListener implements OnGestureListener、OnDoubleTapListenerが表示されるので、リスニングが最も完全です.
    Scroller(フレックススライドオブジェクト)
    感嘆せざるを得ないが、iosのスライド自体は弾力性があり、androidの過程は瞬時に完成し、この過度な効果を実現するにはScrollerを使わなければならない.通常、彼はVIewのcomputeScrollと協力して使用します.