From 948141d5a94bd6866c138da0ff33b9b05f469ce7 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 5 Mar 2025 20:41:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E5=88=99=E7=BC=96=E8=BE=91=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E7=9A=84=E9=A1=B9=E6=BB=91=E5=8A=A8=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E5=AE=8C=E6=88=90=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.properties | 4 +- .../adapters/PhoneConnectRuleAdapter.java | 38 +++++ .../studio/contacts/views/LeftScrollView.java | 132 ++++++++++++------ .../src/main/res/layout/view_left_scroll.xml | 13 +- contacts/src/main/res/values/colors.xml | 1 + 5 files changed, 144 insertions(+), 44 deletions(-) diff --git a/contacts/build.properties b/contacts/build.properties index 82ec869..b32022f 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Wed Mar 05 17:21:57 HKT 2025 +#Wed Mar 05 12:40:02 GMT 2025 stageCount=10 libraryProject= baseVersion=1.0 publishVersion=1.0.9 -buildCount=0 +buildCount=35 baseBetaVersion=1.0.10 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/PhoneConnectRuleAdapter.java b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/PhoneConnectRuleAdapter.java index f6eb9cb..a773ba4 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/adapters/PhoneConnectRuleAdapter.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/adapters/PhoneConnectRuleAdapter.java @@ -25,6 +25,7 @@ import android.widget.LinearLayout; import android.view.MotionEvent; import android.widget.HorizontalScrollView; import cc.winboll.studio.contacts.views.LeftScrollView; +import com.hjq.toast.ToastUtils; public class PhoneConnectRuleAdapter extends RecyclerView.Adapter { @@ -62,6 +63,43 @@ public class PhoneConnectRuleAdapter extends RecyclerView.Adapter list = Rules.getInstance(context).getPhoneBlacRuleBeanList(); + if(position > 0) { + ToastUtils.show("onUp"); + simpleViewHolder.scrollView.smoothScrollTo(0, 0); +// PhoneConnectRuleModel newBean = new PhoneConnectRuleModel(); +// newBean.setRuleText(list.get(position).getRuleText()); +// newBean.setIsAllowConnection(list.get(position).isAllowConnection()); +// newBean.setIsEnable(list.get(position).isEnable()); +// newBean.setIsSimpleView(list.get(position).isSimpleView()); + list.add(position - 1, list.get(position)); + list.remove(position + 1); + Rules.getInstance(context).saveRules(); + notifyDataSetChanged(); + } + } + + @Override + public void onDown() { + ArrayList list = Rules.getInstance(context).getPhoneBlacRuleBeanList(); + if(position < list.size() - 1) { + ToastUtils.show("onDown"); + simpleViewHolder.scrollView.smoothScrollTo(0, 0); +// PhoneConnectRuleModel newBean = new PhoneConnectRuleModel(); +// newBean.setRuleText(list.get(position).getRuleText()); +// newBean.setIsAllowConnection(list.get(position).isAllowConnection()); +// newBean.setIsEnable(list.get(position).isEnable()); +// newBean.setIsSimpleView(list.get(position).isSimpleView()); + list.add(position + 2, list.get(position)); + list.remove(position); + Rules.getInstance(context).saveRules(); + notifyDataSetChanged(); + } + } + @Override public void onEdit() { simpleViewHolder.scrollView.smoothScrollTo(0, 0); diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/views/LeftScrollView.java b/contacts/src/main/java/cc/winboll/studio/contacts/views/LeftScrollView.java index 7110a90..2bebd41 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/views/LeftScrollView.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/views/LeftScrollView.java @@ -15,7 +15,6 @@ import android.widget.LinearLayout; import android.widget.TextView; import cc.winboll.studio.contacts.R; import cc.winboll.studio.libappbase.LogUtils; -import android.util.TypedValue; public class LeftScrollView extends HorizontalScrollView { @@ -26,8 +25,12 @@ public class LeftScrollView extends HorizontalScrollView { private TextView textView; private Button editButton; private Button deleteButton; - private float mLastX; + private Button upButton; + private Button downButton; + private float mStartX; + private float mEndX; private boolean isScrolling = false; + private int nScrollAcceptSize; public LeftScrollView(Context context) { super(context); @@ -52,6 +55,7 @@ public class LeftScrollView extends HorizontalScrollView { LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) contentLayout.getLayoutParams(); layoutParams.width = contentWidth; contentLayout.setLayoutParams(layoutParams); + } private void init() { @@ -69,6 +73,10 @@ public class LeftScrollView extends HorizontalScrollView { editButton = viewMain.findViewById(R.id.edit_btn); // 创建删除按钮 deleteButton = viewMain.findViewById(R.id.delete_btn); + // 向上按钮 + upButton = viewMain.findViewById(R.id.up_btn); + // 向下按钮 + downButton = viewMain.findViewById(R.id.down_btn); // 编辑按钮点击事件 editButton.setOnClickListener(new OnClickListener() { @@ -89,6 +97,25 @@ public class LeftScrollView extends HorizontalScrollView { } } }); + // 编辑按钮点击事件 + upButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (onActionListener != null) { + onActionListener.onUp(); + } + } + }); + + // 删除按钮点击事件 + downButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (onActionListener != null) { + onActionListener.onDown(); + } + } + }); } @Override @@ -96,53 +123,40 @@ public class LeftScrollView extends HorizontalScrollView { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: LogUtils.d(TAG, "ACTION_DOWN"); - mLastX = event.getX(); - isScrolling = false; + mStartX = event.getX(); +// isScrolling = false; break; case MotionEvent.ACTION_MOVE: //LogUtils.d(TAG, "ACTION_MOVE"); - float currentX = event.getX(); - float deltaX = mLastX - currentX; - mLastX = currentX; - if (Math.abs(deltaX) > 0) { - isScrolling = true; - } +// float currentX = event.getX(); +// float deltaX = mStartX - currentX; +// //mLastX = currentX; +// if (Math.abs(deltaX) > 0) { +// isScrolling = true; +// } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: - LogUtils.d(TAG, "ACTION_UP"); - if (isScrolling) { - LogUtils.d(TAG, String.format("isScrolling \ngetScrollX() %d\neditButton.getWidth() %d", getScrollX(), editButton.getWidth())); - int scrollX = getScrollX(); - if (scrollX > editButton.getWidth()) { - // 获取HorizontalScrollView的子视图 - View childView = getChildAt(0); - if (childView != null) { - // 计算需要滑动到最右边的距离 - int scrollToX = childView.getWidth() - getWidth(); - // 确保滑动距离不小于0 - final int scrollToX2 = Math.max(0, scrollToX); - // 平滑滑动到最右边 - post(new Runnable() { - @Override - public void run() { - smoothScrollTo(scrollToX2, 0); - LogUtils.d(TAG, "smoothScrollTo(0, 0);"); - } - }); - LogUtils.d(TAG, "smoothScrollTo(scrollToX, 0);"); + if (getScrollX() > 0) { + LogUtils.d(TAG, "ACTION_UP"); + mEndX = event.getX(); + LogUtils.d(TAG, String.format("mStartX %f, mEndX %f", mStartX, mEndX)); + if (mEndX < mStartX) { + LogUtils.d(TAG, String.format("mEndX >= mStartX \ngetScrollX() %d", getScrollX())); + //if (getScrollX() > editButton.getWidth()) { + if (Math.abs(mStartX - mEndX) > editButton.getWidth()) { + smoothScrollToRight(); + } else { + smoothScrollToLeft(); } } else { - // 恢复原状 - // 在手指抬起时,使用 post 方法调用 smoothScrollTo(0, 0) - post(new Runnable() { - @Override - public void run() { - smoothScrollTo(0, 0); - LogUtils.d(TAG, "smoothScrollTo(0, 0);"); - } - }); - //toolLayout.setTranslationX(0); + LogUtils.d(TAG, String.format("mEndX >= mStartX \ngetScrollX() %d", getScrollX())); + //if (getScrollX() > deleteButton.getWidth()) { + if (Math.abs(mEndX - mStartX) > deleteButton.getWidth()) { + smoothScrollToLeft(); + } else { + smoothScrollToRight(); + } } } break; @@ -150,6 +164,40 @@ public class LeftScrollView extends HorizontalScrollView { return super.onTouchEvent(event); } + void smoothScrollToRight() { + mEndX = 0; + mStartX = 0; + View childView = getChildAt(0); + if (childView != null) { + // 计算需要滑动到最右边的距离 + int scrollToX = childView.getWidth() - getWidth(); + // 确保滑动距离不小于0 + final int scrollToX2 = Math.max(0, scrollToX); + // 平滑滑动到最右边 + post(new Runnable() { + @Override + public void run() { + smoothScrollTo(scrollToX2, 0); + LogUtils.d(TAG, "smoothScrollTo(0, 0);"); + } + }); + LogUtils.d(TAG, "smoothScrollTo(scrollToX, 0);"); + } + } + + void smoothScrollToLeft() { + mEndX = 0; + mStartX = 0; + // 在手指抬起时,使用 post 方法调用 smoothScrollTo(0, 0) + post(new Runnable() { + @Override + public void run() { + smoothScrollTo(0, 0); + LogUtils.d(TAG, "smoothScrollTo(0, 0);"); + } + }); + } + // 设置文本内容 public void setText(CharSequence text) { textView.setText(text); @@ -159,6 +207,8 @@ public class LeftScrollView extends HorizontalScrollView { public interface OnActionListener { void onEdit(); void onDelete(); + void onUp(); + void onDown(); } private OnActionListener onActionListener; diff --git a/contacts/src/main/res/layout/view_left_scroll.xml b/contacts/src/main/res/layout/view_left_scroll.xml index c9f2e07..b06c552 100644 --- a/contacts/src/main/res/layout/view_left_scroll.xml +++ b/contacts/src/main/res/layout/view_left_scroll.xml @@ -30,7 +30,18 @@ android:layout_height="wrap_content" android:text="编辑" android:background="@color/blue" /> - +