所以,我打算创建一个自定义视图,以获得像tinder一样的相册,一个在照片位置自动调整的滚动视图。我认为通过几次调整的horizontalscrollview可以完成这项工作。在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)并继续滚动。我可以做些什么来避免释放后的这种自动滚动吗?我可以以某种方式操纵输入事件的数据吗
谢谢!
答案 0 :(得分:0)
最后我得到了解决方案。我扩展了HorizontalcrollView:
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);
}
}
}
它可以处理您想要放在此自定义视图内的Horizontal LinearLayout中的所有图像。您还必须将图像大小调整为stepScrollView水平尺寸。在我的情况下layoutWidth。