提高百分比拉动进度条与ViewPager兼容度

This commit is contained in:
ZhanGSKen 2025-03-09 13:44:44 +08:00
parent 334da43001
commit 4756226a56
6 changed files with 57 additions and 139 deletions

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun Mar 09 11:30:17 HKT 2025
#Sun Mar 09 05:43:05 GMT 2025
stageCount=9
libraryProject=libaes
baseVersion=7.6
publishVersion=7.6.8
buildCount=0
buildCount=24
baseBetaVersion=7.6.9

View File

@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Sun Mar 09 11:30:09 HKT 2025
#Sun Mar 09 05:43:05 GMT 2025
stageCount=9
libraryProject=libaes
baseVersion=7.6
publishVersion=7.6.8
buildCount=0
buildCount=24
baseBetaVersion=7.6.9

View File

@ -192,7 +192,7 @@ public class TestViewPageFragment extends Fragment implements ViewPager.OnPageCh
}
void initAOHPCTCSeekBar() {
AOHPCTCSeekBar seekbar = mView.findViewById(R.id.fragmentviewpageAOHPCTCSeekBar1);
AOHPCTCSeekBar seekbar = views.get(3).findViewById(R.id.fragmentviewpageAOHPCTCSeekBar1);
seekbar.setThumb(getActivity().getDrawable(R.drawable.ic_launcher));
//seekbar.setThumbOffset(200);
//seekbar.setThumbOffset(1);
@ -207,7 +207,7 @@ public class TestViewPageFragment extends Fragment implements ViewPager.OnPageCh
}
void initAOHPCTCSeekBar2() {
AOHPCTCSeekBar seekbar = mView.findViewById(R.id.fragmentviewpageAOHPCTCSeekBar2);
AOHPCTCSeekBar seekbar = views.get(3).findViewById(R.id.fragmentviewpageAOHPCTCSeekBar2);
seekbar.setThumb(getActivity().getDrawable(R.drawable.ic_call));
//seekbar.setThumbOffset(200);
//seekbar.setThumbOffset(1);

View File

@ -16,29 +16,21 @@ public class AOHPCTCSeekBar extends SeekBar {
public static final String TAG = "AOHPCTCSeekBar";
Context mContext;
int thumbWidth = 1;
int progressBarWidth = 1;
volatile int thumbWidth = 1;
volatile int progressBarWidth = 1;
// 设置按钮模糊右边边缘像素
int blurRightDP = 1;
volatile int blurRightDP = 1;
// 是否从起点拉动的标志
volatile boolean isStartSeek = false;
// 可开始拉动的起始位置(百分比值)
//static final int ENABLE_POST_PERCENT_X = 20;
//int seekablePosition;
// 最小拉动值滑块拉动值要超过这个值确定事件才会提交
//static final int TO_MIN_VALUE = 15;
// 外部接口对象确定事件提交会调用该对象的方法
OnOHPCListener mOnOHPCListener;
// 是否从起点拉动的标志
boolean mIsStartTo = false;
// 拉动的滑动值
int mnTo = 0;
public void setBlurRightDP(int blurRight) {
this.blurRightDP = blurRight;
}
public void setOnOHPCListener(OnOHPCListener listener) {
mOnOHPCListener = listener;
}
@ -55,24 +47,6 @@ public class AOHPCTCSeekBar extends SeekBar {
public AOHPCTCSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
//LogUtils.d(TAG, "AOHPCTCSeekBar(...)");
// 获得TypedArray
//TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AToolbar);
// 获得attrs.xml里面的属性值,格式为:名称_属性名,后面是默认值
//int colorBackgroud = a.getColor(R.styleable.ACard_backgroudColor, context.getColor(R.color.colorACardBackgroung));
//int centerColor = a.getColor(R.styleable.AToolbar_centerColor, context.getColor(R.color.colorAToolbarCenterColor));
//int endColor = a.getColor(R.styleable.AToolbar_endColor, context.getColor(R.color.colorAToolbarEndColor));
//float tSize = a.getDimension(R.styleable.CustomView_tSize, 35);
//p.setColor(tColor);
//p.setTextSize(tSize);
//Drawable drawable = context.getDrawable(R.drawable.frame_atoolbar);
//setBackground(context.getDrawable(R.drawable.acard_frame_main));
// 返回一个绑定资源结束的信号给资源
//a.recycle();
}
public AOHPCTCSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
@ -81,110 +55,55 @@ public class AOHPCTCSeekBar extends SeekBar {
}
void initView(Context context) {
LogUtils.d(TAG, "initView(...)");
mContext = context;
// Drawable thumbDrawable = getThumb();
// if (thumbDrawable!= null) {
// int iconWidth = thumbDrawable.getIntrinsicWidth();
// LogUtils.d(TAG, String.format("iconWidth %d", iconWidth));
// seekablePosition = iconWidth;
// }
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//LogUtils.d(TAG, "ACTION_DOWN");
// 有效的拖动起始位置(ENABLE_POST_PERCENT_X)%
//int nEnablePostX = ((getRight() - getLeft()) * ENABLE_POST_PERCENT_X / 100) + getLeft();
//int nEnablePostX = ((getRight() - getLeft()) * seekablePosition / 100) + getLeft();
/*LogUtils.d(TAG, "event.getX() is " + Float.toString(event.getX()));
LogUtils.d(TAG, String.format("thumbWidth %d progressBarWidth %d", thumbWidth, progressBarWidth));
LogUtils.d(TAG, String.format("mIsStartTo %s", mIsStartTo));
*/
getParent().requestDisallowInterceptTouchEvent(true);
if (thumbWidth + blurRightDP > event.getX() && event.getX() > 0) {
mIsStartTo = true;
return true;
//return super.dispatchTouchEvent(event);
isStartSeek = true;
}
// if (!mIsStartTo) {
// resetView();
// return false;
// }
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
//LogUtils.d(TAG, "ACTION_MOVE");
/*LogUtils.d(TAG, "event.getX() is " + Float.toString(event.getX()));
LogUtils.d(TAG, String.format("thumbWidth %d progressBarWidth %d", thumbWidth, progressBarWidth));
LogUtils.d(TAG, String.format("mIsStartTo %s", mIsStartTo));
*/
if (mIsStartTo) {
return super.dispatchTouchEvent(event);
} else {
return false;
if (isStartSeek) {
super.dispatchTouchEvent(event);
}
} else if (event.getAction() == MotionEvent.ACTION_UP
|| event.getAction() == MotionEvent.ACTION_CANCEL) {
//LogUtils.d(TAG, Integer.toString(getProgress()));
// 提交100%确定事件
// if (getProgress() == progressBarWidth) {
// //((getProgress() == 100) && (mnTo > TO_MIN_VALUE)) {
// //LogUtils.d(TAG, "Commit mnTo is " + Integer.toString(mnTo));
// mOnOHPCListener.onOHPCommit();
// resetView();
// //return true;
// } else {
// resetView();
// mIsStartTo = false;
// }
//
if (getProgress() == progressBarWidth) {
mOnOHPCListener.onOHPCommit();
}
mIsStartTo = false;
resetView();
return false;
getParent().requestDisallowInterceptTouchEvent(false);
if (getProgress() == progressBarWidth) {
mOnOHPCListener.onOHPCommit();
}
// 重置控件状态
setProgress(0);
isStartSeek = false;
}
//LogUtils.d(TAG, "dispatchTouchEvent End");
return super.dispatchTouchEvent(event);
}
// 重置控件状态
//
void resetView() {
setProgress(0);
mnTo = 0;
mIsStartTo = false;
return true;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
LogUtils.d(TAG, String.format("width %d height %d", width, height));
//int height = MeasureSpec.getSize(heightMeasureSpec);
//LogUtils.d(TAG, String.format("width %d height %d", width, height));
// 使用width和height进行后续操作
// 获取SeekBar的图标
// 获取SeekBar的图标宽度
Drawable thumbDrawable = getThumb();
if (thumbDrawable != null) {
// 获取图标宽度
thumbWidth = thumbDrawable.getIntrinsicWidth();
// 获取进度条宽度
progressBarWidth = width;//getWidth();// - getPaddingLeft() - getPaddingRight();
// 计算百分比
//float percentage = (float) thumbWidth / progressBarWidth * 100;
LogUtils.d(TAG, String.format("thumbWidth %d progressBarWidth %d", thumbWidth, progressBarWidth));
//LogUtils.d(TAG, String.format("Thumb width / ProgressBar width percentage: %f", percentage));
//seekablePosition = (int)percentage;
setThumbOffset(0);
setMax(progressBarWidth);
}
// 获取进度条宽度
progressBarWidth = width;
//LogUtils.d(TAG, String.format("thumbWidth %d progressBarWidth %d", thumbWidth, progressBarWidth));
// 设置图标位置
setThumbOffset(0);
// 设置进度条刻度
setMax(progressBarWidth);
}
}

View File

@ -12,26 +12,6 @@
android:layout_height="wrap_content"
android:text="AOHPCTCSeekBar"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<cc.winboll.studio.libaes.views.AOHPCTCSeekBar
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/fragmentviewpageAOHPCTCSeekBar1"
android:padding="10dp"/>
<cc.winboll.studio.libaes.views.AOHPCTCSeekBar
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/fragmentviewpageAOHPCTCSeekBar2"
android:padding="10dp"/>
</LinearLayout>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="0dp"

View File

@ -11,6 +11,25 @@
android:layout_height="wrap_content"
android:text="AOHPCTCSeekBar"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<cc.winboll.studio.libaes.views.AOHPCTCSeekBar
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/fragmentviewpageAOHPCTCSeekBar1"
android:padding="10dp"/>
<cc.winboll.studio.libaes.views.AOHPCTCSeekBar
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/fragmentviewpageAOHPCTCSeekBar2"
android:padding="10dp"/>
</LinearLayout>
</LinearLayout>