2016-08-15 6 views
0

これで、写真の位置を自動調整したスクロールビューのような写真のアルバムを作成するためにカスタムビューを作成しようとしていました。私は、いくつかの調整を加えたhorizo​​ntalscrollviewが仕事をすると思った。 scrollView SWに5 * LayoutWidth水平LinerLayoutを追加しましたし、このようにそのonTouchListener定義:スクロールビューは、スクロール速度が速いときにsetScrollX()を無視しています

sw.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      Log.d("MotionEvent", String.valueOf(event.getAction())); 
      if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL){ 
       int scrollX=sw.getScrollX(); 
       Log.d("scrollX", String.valueOf(scrollX)); 
       //Log.d("layoutWidth", String.valueOf(layoutWidth)); 
       int aux = Math.round((float)scrollX/layoutWidth)*layoutWidth; 
       Log.d("correction", String.valueOf(aux)); 
       sw.setScrollX(aux); 



      } 



      return false; 
     } 


    }); 

タッチ入力を解放したときに5枚の写真の一つに焦点を当て、期待と同じように働いているが、私はスクロールするととスクロールビューは、スクロールビューがただちにsw.setScrollX(aux)を無視し、スクロールし続けます。リリース後のこの自動スクロールを避けるために何かできますか?何らかの形で入力イベントのデータを操作できますか

ありがとう!

答えて

0

最後に私は解決策を得ました。

public class stepScrollView extends HorizontalScrollView { 
public stepScrollView(Context context) { 
    super(context); 
} 

public stepScrollView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public stepScrollView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    switch (ev.getAction()) { 
     case MotionEvent.ACTION_UP: 

      Display d = ((Activity) getContext()).getWindowManager().getDefaultDisplay(); 
      Point size = new Point(); 
      d.getSize(size); 
      int layoutWidth = size.x; 
      int aux = Math.round((float)this.getScrollX()/layoutWidth)*layoutWidth; 
      this.setScrollX(aux); 


      return false; 
     default: 
      return super.onTouchEvent(ev); 
    } 
} 



} 

それはあなたが水平方向のLinearLayout内部でこのカスタムビューを入れたいすべての画像で動作します。私はそのようなHorizo​​ntalcrollViewを拡張しました。また、画像のサイズをstepScrollView水平ディメンションに変更する必要があります。私の場合はlayoutWidth。

関連する問題