Asw*_*tha 3 android scrollview
嘿,只是想确定在Android中滚动视图是向上滚动还是向下滚动。想在向上滚动和向下滚动时执行不同的操作。
任何想法表示赞赏,谢谢
尝试以下操作:扩展Scrollview并重写onTouchEvent方法
private float mTouchPosition;
private float mReleasePosition;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
mTouchPosition = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
mReleasePosition = event.getY();
if (mTouchPosition - mReleasePosition > 0) {
// user scroll down
} else {
//user scroll up
}
}
return super.onTouchEvent(event);
}
Run Code Online (Sandbox Code Playgroud)
是的,你可以使用这个
scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
}
});
Run Code Online (Sandbox Code Playgroud)
但这需要 minSdkVersion 为 23。因此,您可以将 minSdkVersion 更改为 23 或创建一个自定义滚动视图,如下所示:
public class TouchDetectableScrollView extends ScrollView {
OnMyScrollChangeListener myScrollChangeListener;
public TouchDetectableScrollView(Context context) {
super(context);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TouchDetectableScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (myScrollChangeListener!=null)
{
if (t>oldt)
{
myScrollChangeListener.onScrollDown();
}
else if (t<oldt){
myScrollChangeListener.onScrollUp();
}
}
}
public OnMyScrollChangeListener getMyScrollChangeListener() {
return myScrollChangeListener;
}
public void setMyScrollChangeListener(OnMyScrollChangeListener myScrollChangeListener) {
this.myScrollChangeListener = myScrollChangeListener;
}
public interface OnMyScrollChangeListener
{
public void onScrollUp();
public void onScrollDown();
}}
Run Code Online (Sandbox Code Playgroud)
并在您的 xml 和 java 代码中使用 TouchDetectableScrollView 然后像这样设置侦听器:
scrollView.setMyScrollChangeListener(new TouchDetectableScrollView.OnMyScrollChangeListener() {
@Override
public void onScrollUp() {
//Toast.makeText(getActivity(), "Scrolling up", Toast.LENGTH_SHORT).show();
Log.d("scroll","up");
}
@Override
public void onScrollDown() {
// Toast.makeText(getActivity(), "Scrolling down", Toast.LENGTH_SHORT).show();
Log.d("scroll","down");
}
});
Run Code Online (Sandbox Code Playgroud)
小智 5
试试这个,它对我有用
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if(scrollY<=oldScrollY)
{
//scroll up
relativeLayout.setVisibility(View.VISIBLE);
}
else {
relativeLayout.setVisibility(View.GONE);}
}
});
}
Run Code Online (Sandbox Code Playgroud)
尝试创建 customScrollView 类并覆盖(修复某些情况)
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
Log.e(TAG, "new " + t + " old " + oldt);
if (t >= oldt) {
System.out.println("dwwn");
} else {
System.out.println("upppp");
}
}
Run Code Online (Sandbox Code Playgroud)