|
@@ -3,7 +3,9 @@ package com.kongzue.dialogx.util.views;
|
|
|
import android.content.Context;
|
|
|
import android.content.res.Resources;
|
|
|
import android.util.AttributeSet;
|
|
|
+import android.util.Log;
|
|
|
import android.view.MotionEvent;
|
|
|
+import android.view.View;
|
|
|
import android.widget.ListAdapter;
|
|
|
import android.widget.ListView;
|
|
|
|
|
@@ -11,6 +13,7 @@ import androidx.appcompat.view.ContextThemeWrapper;
|
|
|
|
|
|
import com.kongzue.dialogx.interfaces.BottomMenuListViewTouchEvent;
|
|
|
import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
|
|
|
+import com.kongzue.dialogx.interfaces.ScrollController;
|
|
|
|
|
|
/**
|
|
|
* @author: Kongzue
|
|
@@ -19,103 +22,108 @@ import com.kongzue.dialogx.interfaces.DialogConvertViewInterface;
|
|
|
* @mail: myzcxhh@live.cn
|
|
|
* @createTime: 2020/10/6 23:42
|
|
|
*/
|
|
|
-public class DialogListView extends ListView {
|
|
|
-
|
|
|
+public class DialogListView extends ListView implements ScrollController {
|
|
|
+
|
|
|
private BottomMenuListViewTouchEvent bottomMenuListViewTouchEvent;
|
|
|
-
|
|
|
+
|
|
|
public DialogListView(Context context) {
|
|
|
super(context);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public DialogListView(Context context, AttributeSet attrs) {
|
|
|
super(context, attrs);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public DialogListView(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
|
super(context, attrs, defStyleAttr);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
private DialogConvertViewInterface dialogImpl;
|
|
|
-
|
|
|
+
|
|
|
public DialogListView(DialogConvertViewInterface dialog, Context context) {
|
|
|
super(context);
|
|
|
dialogImpl = dialog;
|
|
|
setVerticalScrollBarEnabled(false);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public DialogListView(DialogConvertViewInterface dialog, Context context, int theme) {
|
|
|
- super(new ContextThemeWrapper(context,theme));
|
|
|
+ super(new ContextThemeWrapper(context, theme));
|
|
|
dialogImpl = dialog;
|
|
|
setVerticalScrollBarEnabled(false);
|
|
|
}
|
|
|
-
|
|
|
- @Override
|
|
|
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
|
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
|
|
|
- super.onMeasure(widthMeasureSpec, expandSpec);
|
|
|
- }
|
|
|
-
|
|
|
- private int dip2px(float dpValue) {
|
|
|
- final float scale = Resources.getSystem().getDisplayMetrics().density;
|
|
|
- return (int) (dpValue * scale + 0.5f);
|
|
|
- }
|
|
|
-
|
|
|
- private int mPosition;
|
|
|
- private float touchDownY;
|
|
|
-
|
|
|
+
|
|
|
+// private int dip2px(float dpValue) {
|
|
|
+// final float scale = Resources.getSystem().getDisplayMetrics().density;
|
|
|
+// return (int) (dpValue * scale + 0.5f);
|
|
|
+// }
|
|
|
+//
|
|
|
+// private int mPosition;
|
|
|
+// private float touchDownY;
|
|
|
+//
|
|
|
@Override
|
|
|
public boolean dispatchTouchEvent(MotionEvent ev) {
|
|
|
final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;
|
|
|
-
|
|
|
- if (actionMasked == MotionEvent.ACTION_DOWN) {
|
|
|
- touchDownY = ev.getY();
|
|
|
- if (bottomMenuListViewTouchEvent != null) {
|
|
|
- bottomMenuListViewTouchEvent.down(ev);
|
|
|
- }
|
|
|
- mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());
|
|
|
- return super.dispatchTouchEvent(ev);
|
|
|
- }
|
|
|
-
|
|
|
- if (actionMasked == MotionEvent.ACTION_MOVE) {
|
|
|
- if (bottomMenuListViewTouchEvent != null) {
|
|
|
- bottomMenuListViewTouchEvent.move(ev);
|
|
|
- }
|
|
|
- if (Math.abs(touchDownY - ev.getY()) > dip2px(5)) {
|
|
|
- ev.setAction(MotionEvent.ACTION_CANCEL);
|
|
|
- dispatchTouchEvent(ev);
|
|
|
- return false;
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
- if (actionMasked == MotionEvent.ACTION_UP || actionMasked == MotionEvent.ACTION_CANCEL) {
|
|
|
- if (bottomMenuListViewTouchEvent != null) {
|
|
|
- bottomMenuListViewTouchEvent.up(ev);
|
|
|
- }
|
|
|
- if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {
|
|
|
- super.dispatchTouchEvent(ev);
|
|
|
- } else {
|
|
|
- setPressed(false);
|
|
|
- invalidate();
|
|
|
- }
|
|
|
+ switch (actionMasked){
|
|
|
+ case MotionEvent.ACTION_DOWN:
|
|
|
+ if (bottomMenuListViewTouchEvent != null) {
|
|
|
+ bottomMenuListViewTouchEvent.down(ev);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MotionEvent.ACTION_MOVE:
|
|
|
+ if (bottomMenuListViewTouchEvent != null) {
|
|
|
+ bottomMenuListViewTouchEvent.move(ev);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case MotionEvent.ACTION_UP:
|
|
|
+ if (bottomMenuListViewTouchEvent != null) {
|
|
|
+ bottomMenuListViewTouchEvent.up(ev);
|
|
|
+ }
|
|
|
+ break;
|
|
|
}
|
|
|
-
|
|
|
return super.dispatchTouchEvent(ev);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
public BottomMenuListViewTouchEvent getBottomMenuListViewTouchEvent() {
|
|
|
return bottomMenuListViewTouchEvent;
|
|
|
}
|
|
|
-
|
|
|
- private int size = 1;
|
|
|
-
|
|
|
- @Override
|
|
|
- public void setAdapter(ListAdapter adapter) {
|
|
|
- size = adapter.getCount();
|
|
|
- super.setAdapter(adapter);
|
|
|
- }
|
|
|
-
|
|
|
+
|
|
|
public DialogListView setBottomMenuListViewTouchEvent(BottomMenuListViewTouchEvent bottomMenuListViewTouchEvent) {
|
|
|
this.bottomMenuListViewTouchEvent = bottomMenuListViewTouchEvent;
|
|
|
return this;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public int getScrollDistance() {
|
|
|
+ View c = getChildAt(0);
|
|
|
+ if (c == null) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ int firstVisiblePosition = getFirstVisiblePosition();
|
|
|
+ int top = c.getTop();
|
|
|
+ int scrollY = -top + firstVisiblePosition * c.getHeight();
|
|
|
+ return scrollY;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isCanScroll() {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ boolean lockScroll;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void lockScroll(boolean lockScroll) {
|
|
|
+ this.lockScroll = lockScroll;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean onTouchEvent(MotionEvent event) {
|
|
|
+ if (lockScroll) return false;
|
|
|
+ return super.onTouchEvent(event);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean isLockScroll() {
|
|
|
+ return lockScroll;
|
|
|
+ }
|
|
|
}
|