ScrollView自定义水平滑动事件

来源:互联网 发布:论文检测软件免费 编辑:程序博客网 时间:2024/05/15 18:06

自定义一个ScrollView

VerticalScrollView.java

package com.outsider.view;import android.annotation.SuppressLint;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.widget.ScrollView;public class VerticalScrollView extends ScrollView {    //定义自己的滑动监听器    private OnScrollViewScrollListener onScrollViewScrollListener;    public VerticalScrollView(Context context) {        super(context);    }    public VerticalScrollView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);    }    public VerticalScrollView(Context context, AttributeSet attrs) {        super(context, attrs);    }    public OnScrollViewScrollListener getOnScrollViewScrollListener() {        return onScrollViewScrollListener;    }    public void setOnScrollViewScrollListener(OnScrollViewScrollListener onScrollViewScrollListener) {        this.onScrollViewScrollListener = onScrollViewScrollListener;    }    @SuppressLint("ClickableViewAccessibility")    @Override    public boolean onTouchEvent(MotionEvent ev) {        //Log.i("mytrace", ev.getX() + " " + ev.getY());        //先处理自定义事务,再调用原生方法        if(this.onScrollViewScrollListener != null){            this.onScrollViewScrollListener.onScrollChanged(ev);        }        return super.onTouchEvent(ev);    }}

OnScrollViewScrollListener.java

package com.outsider.view;import android.view.MotionEvent;public interface OnScrollViewScrollListener {    void onScrollChanged(MotionEvent ev);}

实现OnScrollViewScrollListener此接口来自定义事件处理

VerticalScrollView scroll = (VerticalScrollView) findViewById(R.id.scrollView);scroll.setOnScrollViewScrollListener(new OnScrollViewScrollListener() {@Overridepublic void onScrollChanged(MotionEvent event) {    Log.i("mytrace", "onscrollchange");    switch (event.getAction()) {    case MotionEvent.ACTION_DOWN: {        prev.set((int) event.getX(), (int) event.getY());        break;    }    case MotionEvent.ACTION_UP: {        scrollFlag = false;        break;    }    case MotionEvent.ACTION_MOVE: {        float moveX = prev.x - event.getX();        // 左滑        if (moveX > 150 && moveX < 5000) {            if (!scrollFlag) {                if (VacabularManager.getVacabulars().size() <= 0) {                    fire();                    Toast.makeText(MainActivity.this, "请先导入词库文件", Toast.LENGTH_LONG).show();                } else {                    VacabularManager.getVacabulars().next();                    show();                }                scrollFlag = true;            }        } else if (moveX < -150 && moveX > -5000) {// 右滑            if (!scrollFlag) {                if (VacabularManager.getVacabulars().size() <= 0) {                    fire();                    Toast.makeText(MainActivity.this, "请先导入词库文件", Toast.LENGTH_LONG).show();                } else {                    VacabularManager.getVacabulars().pre();                    show();                }                scrollFlag = true;            }        }    }    }}});

layout.xml

<com.outsider.view.VerticalScrollView        android:id="@+id/scrollView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:fadingEdge="vertical|horizontal"        android:scrollbars="horizontal|vertical" ></com.outsider.view.VerticalScrollView>
0 0