ScrollView以高滚动速度忽略setScrollX()

时间:2016-08-15 11:29:03

标签: android scrollview

所以,我打算创建一个自定义视图,以获得像tinder一样的相册,一个在照片位置自动调整的滚动视图。我认为通过几次调整的horizo​​ntalscrollview可以完成这项工作。在scrollView sw中添加了一个5 * LayoutWidth水平LinerLayout,并像这样定义了它的onTouchListener:

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张照片中的一张,但是当我通过快速手势滚动和释放时,scrollview只是忽略了sw.setScrollX(aux)并继续滚动。我可以做些什么来避免释放后的这种自动滚动吗?我可以以某种方式操纵输入事件的数据吗

谢谢!

1 个答案:

答案 0 :(得分:0)

最后我得到了解决方案。我扩展了Horizo​​ntalcrollView:

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);
    }
}



}

它可以处理您想要放在此自定义视图内的Horizo​​ntal LinearLayout中的所有图像。您还必须将图像大小调整为stepScrollView水平尺寸。在我的情况下layoutWidth。