網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
本文實(shí)例為大家分享了Android自定義雙向滑動(dòng)控件的具體代碼,供大家參考,具體內(nèi)容如下
先看一下效果圖
1.SeekBarPressure工具類(lèi)
public class SeekBarPressure extends View {
? ? private static final String TAG = "SeekBarPressure";
? ? private static final int CLICK_ON_LOW = 1; ? ? ?//點(diǎn)擊在前滑塊上
? ? private static final int CLICK_ON_HIGH = 2; ? ? //點(diǎn)擊在后滑塊上
? ? private static final int CLICK_IN_LOW_AREA = 3;
? ? private static final int CLICK_IN_HIGH_AREA = 4;
? ? private static final int CLICK_OUT_AREA = 5;
? ? private static final int CLICK_INVAILD = 0;
? ? /*
? ? ?* private static final int[] PRESSED_STATE_SET = {
? ? ?* android.R.attr.state_focused, android.R.attr.state_pressed,
? ? ?* android.R.attr.state_selected, android.R.attr.state_window_focused, };
? ? ?*/
? ? private static final int[] STATE_NORMAL = {};
? ? private static final int[] STATE_PRESSED = {
? ? ? ? ? ? android.R.attr.state_pressed, android.R.attr.state_window_focused,
? ? };
? ? private Drawable hasScrollBarBg; ? ? ? ?//滑動(dòng)條滑動(dòng)后背景圖
? ? private Drawable notScrollBarBg; ? ? ? ?//滑動(dòng)條未滑動(dòng)背景圖
? ? private Drawable mThumbLow; ? ? ? ? //前滑塊
? ? private Drawable mThumbHigh; ? ? ? ?//后滑塊
?
? ? private int mScollBarWidth; ? ? //控件寬度=滑動(dòng)條寬度+滑動(dòng)塊寬度
? ? private int mScollBarHeight; ? ?//滑動(dòng)條高度
?
? ? private int mThumbWidth; ? ? ? ?//滑動(dòng)塊寬度
? ? private int mThumbHeight; ? ? ? //滑動(dòng)塊高度
?
? ? private double mOffsetLow = 0; ? ? //前滑塊中心坐標(biāo)
? ? private double mOffsetHigh = 0; ? ?//后滑塊中心坐標(biāo)
? ? private int mDistance = 0; ? ? ?//總刻度是固定距離 兩邊各去掉半個(gè)滑塊距離
?
? ? private int mThumbMarginTop = 30; ? //滑動(dòng)塊頂部距離上邊框距離,也就是距離字體頂部的距離
?
? ? private int mFlag = CLICK_INVAILD;
? ? private OnSeekBarChangeListener mBarChangeListener;
?
?
? ? private double defaultScreenLow = 0; ? ?//默認(rèn)前滑塊位置百分比
? ? private double defaultScreenHigh = 100; ?//默認(rèn)后滑塊位置百分比
?
? ? private boolean isEdit = false; ? ? //輸入框是否正在輸入
?
? ? public SeekBarPressure(Context context) {
? ? ? ? this(context, null);
? ? }
?
? ? public SeekBarPressure(Context context, AttributeSet attrs) {
? ? ? ? this(context, attrs, 0);
? ? }
?
? ? public SeekBarPressure(Context context, AttributeSet attrs, int defStyle) {
? ? ? ? super(context, attrs, defStyle);
// ? ? ? ?this.setBackgroundColor(Color.BLACK);
?
? ? ? ? Resources resources = getResources();
? ? ? ? notScrollBarBg = resources.getDrawable(R.color.red);
? ? ? ? hasScrollBarBg = resources.getDrawable(R.color.blue);
? ? ? ? mThumbLow = resources.getDrawable(R.drawable.blue);
? ? ? ? mThumbHigh = resources.getDrawable(R.drawable.red);
?
? ? ? ? mThumbLow.setState(STATE_NORMAL);
? ? ? ? mThumbHigh.setState(STATE_NORMAL);
?
? ? ? ? mScollBarWidth = notScrollBarBg.getIntrinsicWidth();
? ? ? ? mScollBarHeight = notScrollBarBg.getIntrinsicHeight();
?
? ? ? ? mThumbWidth = mThumbLow.getIntrinsicWidth();
? ? ? ? mThumbHeight = mThumbLow.getIntrinsicHeight();
?
? ? }
?
? ? //默認(rèn)執(zhí)行,計(jì)算view的寬高,在onDraw()之前
? ? protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
? ? ? ? int width = measureWidth(widthMeasureSpec);
// ? ? ? ?int height = measureHeight(heightMeasureSpec);
? ? ? ? mScollBarWidth = width;
? ? ? ? mOffsetHigh = width - mThumbWidth / 2;
? ? ? ? mOffsetLow = mThumbWidth / 2;
? ? ? ? mDistance = width - mThumbWidth;
?
? ? ? ? mOffsetLow = formatDouble(defaultScreenLow / 100 * (mDistance ))+ mThumbWidth / 2;
? ? ? ? mOffsetHigh = formatDouble(defaultScreenHigh / 100 * (mDistance)) + mThumbWidth / 2;
? ? ? ? setMeasuredDimension(width, mThumbHeight + mThumbMarginTop+2);
? ? }
?
?
? ? private int measureWidth(int measureSpec) {
? ? ? ? int specMode = MeasureSpec.getMode(measureSpec);
? ? ? ? int specSize = MeasureSpec.getSize(measureSpec);
? ? ? ? //wrap_content
? ? ? ? if (specMode == MeasureSpec.AT_MOST) {
? ? ? ? }
? ? ? ? //fill_parent或者精確值
? ? ? ? else if (specMode == MeasureSpec.EXACTLY) {
? ? ? ? }
?
? ? ? ? return specSize;
? ? }
?
? ? private int measureHeight(int measureSpec) {
? ? ? ? int specMode = MeasureSpec.getMode(measureSpec);
? ? ? ? int specSize = MeasureSpec.getSize(measureSpec);
? ? ? ? int defaultHeight = 100;
? ? ? ? //wrap_content
? ? ? ? if (specMode == MeasureSpec.AT_MOST) {
? ? ? ? }
? ? ? ? //fill_parent或者精確值
? ? ? ? else if (specMode == MeasureSpec.EXACTLY) {
? ? ? ? ? ? defaultHeight = specSize;
? ? ? ? }
?
? ? ? ? return defaultHeight;
? ? }
?
? ? protected void onLayout(boolean changed, int l, int t, int r, int b) {
? ? ? ? super.onLayout(changed, l, t, r, b);
? ? }
?
? ? protected void onDraw(Canvas canvas) {
? ? ? ? super.onDraw(canvas);
?
// ? ? ? ?Paint text_Paint = new Paint();
// ? ? ? ?text_Paint.setTextAlign(Paint.Align.CENTER);
// ? ? ? ?text_Paint.setColor(Color.RED);
// ? ? ? ?text_Paint.setTextSize(50);
?
? ? ? ? int aaa = mThumbMarginTop + mThumbHeight / 2 - mScollBarHeight / 2;
? ? ? ? int bbb = aaa + mScollBarHeight;
?
? ? ? ? //白色,不會(huì)動(dòng)
? ? ? ? notScrollBarBg.setBounds(mThumbWidth / 2, aaa, mScollBarWidth - mThumbWidth / 2, bbb);
? ? ? ? notScrollBarBg.draw(canvas);
?
? ? ? ? //藍(lán)色,中間部分會(huì)動(dòng)
? ? ? ? hasScrollBarBg.setBounds((int)mOffsetLow, aaa, (int)mOffsetHigh, bbb);
? ? ? ? hasScrollBarBg.draw(canvas);
?
? ? ? ? //前滑塊
? ? ? ? mThumbLow.setBounds((int)(mOffsetLow - mThumbWidth / 2), mThumbMarginTop, (int)(mOffsetLow + mThumbWidth / 2), mThumbHeight + mThumbMarginTop);
? ? ? ? mThumbLow.draw(canvas);
?
? ? ? ? //后滑塊
? ? ? ? mThumbHigh.setBounds((int)(mOffsetHigh - mThumbWidth / 2), mThumbMarginTop, (int)(mOffsetHigh + mThumbWidth / 2), mThumbHeight + mThumbMarginTop);
? ? ? ? mThumbHigh.draw(canvas);
?
? ? ? ? double progressLow = formatDouble((mOffsetLow - mThumbWidth / 2) * 100 / mDistance);
? ? ? ? double progressHigh = formatDouble((mOffsetHigh - mThumbWidth / 2) * 100 / mDistance);
// ? ? ? ? ? ?Log.d(TAG, "onDraw-->mOffsetLow: " + mOffsetLow + " ?mOffsetHigh: " + mOffsetHigh ? + " ?progressLow: " + progressLow + " ?progressHigh: " + progressHigh);
? ? ? ?// canvas.drawText((int) progressLow + "", (int)mOffsetLow - 2 - 2, 15, text_Paint);
? ? ? ?// canvas.drawText((int) progressHigh + "", (int)mOffsetHigh - 2, 15, text_Paint);
?
? ? ? ? if (mBarChangeListener != null) {
? ? ? ? ? ? if (!isEdit) {
? ? ? ? ? ? ? ? mBarChangeListener.onProgressChanged(this, progressLow, progressHigh);
? ? ? ? ? ? }
?
? ? ? ? }
? ? }
?
? ? @Override
? ? public boolean onTouchEvent(MotionEvent e) {
? ? ? ? //按下
? ? ? ? if (e.getAction() == MotionEvent.ACTION_DOWN) {
? ? ? ? ? ? if (mBarChangeListener != null) {
? ? ? ? ? ? ? ? mBarChangeListener.onProgressBefore();
? ? ? ? ? ? ? ? isEdit = false;
? ? ? ? ? ? }
? ? ? ? ? ? mFlag = getAreaFlag(e);
// ? ? ? ? ? ?Log.d(TAG, "e.getX: " + e.getX() + "mFlag: " + mFlag);
// ? ? ? ? ? ?Log.d("ACTION_DOWN", "------------------");
? ? ? ? ? ? if (mFlag == CLICK_ON_LOW) {
? ? ? ? ? ? ? ? mThumbLow.setState(STATE_PRESSED);
? ? ? ? ? ? } else if (mFlag == CLICK_ON_HIGH) {
? ? ? ? ? ? ? ? mThumbHigh.setState(STATE_PRESSED);
? ? ? ? ? ? } else if (mFlag == CLICK_IN_LOW_AREA) {
? ? ? ? ? ? ? ? mThumbLow.setState(STATE_PRESSED);
? ? ? ? ? ? ? ? //如果點(diǎn)擊0-mThumbWidth/2坐標(biāo)
? ? ? ? ? ? ? ? if (e.getX() < 0 || e.getX() <= mThumbWidth/2) {
? ? ? ? ? ? ? ? ? ? mOffsetLow = mThumbWidth/2;
? ? ? ? ? ? ? ? } else if (e.getX() > mScollBarWidth - mThumbWidth/2) {
// ? ? ? ? ? ? ? ? ? ?mOffsetLow = mDistance - mDuration;
? ? ? ? ? ? ? ? ? ? mOffsetLow = mThumbWidth/2 + mDistance;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? mOffsetLow = formatDouble(e.getX());
// ? ? ? ? ? ? ? ? ? ?if (mOffsetHigh<= mOffsetLow) {
// ? ? ? ? ? ? ? ? ? ? ? ?mOffsetHigh = (mOffsetLow + mDuration <= mDistance) ? (mOffsetLow + mDuration)
// ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?: mDistance;
// ? ? ? ? ? ? ? ? ? ? ? ?mOffsetLow = mOffsetHigh - mDuration;
// ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else if (mFlag == CLICK_IN_HIGH_AREA) {
? ? ? ? ? ? ? ? mThumbHigh.setState(STATE_PRESSED);
// ? ? ? ? ? ? ? ?if (e.getX() < mDuration) {
// ? ? ? ? ? ? ? ? ? ?mOffsetHigh = mDuration;
// ? ? ? ? ? ? ? ? ? ?mOffsetLow = mOffsetHigh - mDuration;
// ? ? ? ? ? ? ? ?} else if (e.getX() >= mScollBarWidth - mThumbWidth/2) {
// ? ? ? ? ? ? ? ? ? ?mOffsetHigh = mDistance + mThumbWidth/2;
? ? ? ? ? ? ? ? if(e.getX() >= mScollBarWidth - mThumbWidth/2) {
? ? ? ? ? ? ? ? ? ? mOffsetHigh = mDistance + mThumbWidth/2;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? mOffsetHigh = formatDouble(e.getX());
// ? ? ? ? ? ? ? ? ? ?if (mOffsetHigh <= mOffsetLow) {
// ? ? ? ? ? ? ? ? ? ? ? ?mOffsetLow = (mOffsetHigh - mDuration >= 0) ? (mOffsetHigh - mDuration) : 0;
// ? ? ? ? ? ? ? ? ? ? ? ?mOffsetHigh = mOffsetLow + mDuration;
// ? ? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //設(shè)置進(jìn)度條
? ? ? ? ? ? refresh();
?
? ? ? ? ? ? //移動(dòng)move
? ? ? ? } else if (e.getAction() == MotionEvent.ACTION_MOVE) {
// ? ? ? ? ? ?Log.d("ACTION_MOVE", "------------------");
? ? ? ? ? ? if (mFlag == CLICK_ON_LOW) {
? ? ? ? ? ? ? ? if (e.getX() < 0 || e.getX() <= mThumbWidth/2) {
? ? ? ? ? ? ? ? ? ? mOffsetLow = mThumbWidth/2;
? ? ? ? ? ? ? ? } else if (e.getX() >= mScollBarWidth - mThumbWidth/2) {
? ? ? ? ? ? ? ? ? ? mOffsetLow = mThumbWidth/2 + mDistance;
? ? ? ? ? ? ? ? ? ? mOffsetHigh = mOffsetLow;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? mOffsetLow = formatDouble(e.getX());
? ? ? ? ? ? ? ? ? ? if (mOffsetHigh - mOffsetLow <= 0) {
? ? ? ? ? ? ? ? ? ? ? ? mOffsetHigh = (mOffsetLow <= mDistance+mThumbWidth/2) ? (mOffsetLow) : (mDistance+mThumbWidth/2);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else if (mFlag == CLICK_ON_HIGH) {
? ? ? ? ? ? ? ? if (e.getX() < ?mThumbWidth/2) {
? ? ? ? ? ? ? ? ? ? mOffsetHigh = mThumbWidth/2;
? ? ? ? ? ? ? ? ? ? mOffsetLow = mThumbWidth/2;
? ? ? ? ? ? ? ? } else if (e.getX() > mScollBarWidth - mThumbWidth/2) {
? ? ? ? ? ? ? ? ? ? mOffsetHigh = mThumbWidth/2 + mDistance;
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? mOffsetHigh = formatDouble(e.getX());
? ? ? ? ? ? ? ? ? ? if (mOffsetHigh - mOffsetLow <= 0) {
? ? ? ? ? ? ? ? ? ? ? ? mOffsetLow = (mOffsetHigh >= mThumbWidth/2) ? (mOffsetHigh) : mThumbWidth/2;
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? ? ? //設(shè)置進(jìn)度條
? ? ? ? ? ? refresh();
? ? ? ? ? ? //抬起
? ? ? ? } else if (e.getAction() == MotionEvent.ACTION_UP) {
// ? ? ? ? ? ?Log.d("ACTION_UP", "------------------");
? ? ? ? ? ? mThumbLow.setState(STATE_NORMAL);
? ? ? ? ? ? mThumbHigh.setState(STATE_NORMAL);
?
? ? ? ? ? ? if (mBarChangeListener != null) {
? ? ? ? ? ? ? ? mBarChangeListener.onProgressAfter();
? ? ? ? ? ? }
? ? ? ? ? ? //這兩個(gè)for循環(huán) 是用來(lái)自動(dòng)對(duì)齊刻度的,注釋后,就可以自由滑動(dòng)到任意位置
// ? ? ? ? ? ?for (int i = 0; i < money.length; i++) {
// ? ? ? ? ? ? ? ? if(Math.abs(mOffsetLow-i* ((mScollBarWidth-mThumbWidth)/ (money.length-1)))<=(mScollBarWidth-mThumbWidth)/(money.length-1)/2){
// ? ? ? ? ? ? ? ? ? ? mprogressLow=i;
// ? ? ? ? ? ? ? ? ? ? mOffsetLow =i* ((mScollBarWidth-mThumbWidth)/(money.length-1));
// ? ? ? ? ? ? ? ? ? ? invalidate();
// ? ? ? ? ? ? ? ? ? ? break;
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ?}
//
// ? ? ? ? ? ?for (int i = 0; i < money.length; i++) {
// ? ? ? ? ? ? ? ? ?if(Math.abs(mOffsetHigh-i* ((mScollBarWidth-mThumbWidth)/(money.length-1) ))<(mScollBarWidth-mThumbWidth)/(money.length-1)/2){
// ? ? ? ? ? ? ? ? ? ? ?mprogressHigh=i;
// ? ? ? ? ? ? ? ? ? ? ? mOffsetHigh =i* ((mScollBarWidth-mThumbWidth)/(money.length-1));
// ? ? ? ? ? ? ? ? ? ? ? invalidate();
// ? ? ? ? ? ? ? ? ? ? ? break;
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ?}
? ? ? ? }
? ? ? ? return true;
? ? }
?
? ? public int getAreaFlag(MotionEvent e) {
?
? ? ? ? int top = mThumbMarginTop;
? ? ? ? int bottom = mThumbHeight + mThumbMarginTop;
? ? ? ? if (e.getY() >= top && e.getY() <= bottom && e.getX() >= (mOffsetLow - mThumbWidth / 2) && e.getX() <= mOffsetLow + mThumbWidth / 2) {
? ? ? ? ? ? return CLICK_ON_LOW;
? ? ? ? } else if (e.getY() >= top && e.getY() <= bottom && e.getX() >= (mOffsetHigh - mThumbWidth / 2) && e.getX() <= (mOffsetHigh + mThumbWidth / 2)) {
? ? ? ? ? ? return CLICK_ON_HIGH;
? ? ? ? } else if (e.getY() >= top
? ? ? ? ? ? ? ? && e.getY() <= bottom
? ? ? ? ? ? ? ? && ((e.getX() >= 0 && e.getX() < (mOffsetLow - mThumbWidth / 2)) || ((e.getX() > (mOffsetLow + mThumbWidth / 2))
? ? ? ? ? ? ? ? && e.getX() <= ((double) mOffsetHigh + mOffsetLow) / 2))) {
? ? ? ? ? ? return CLICK_IN_LOW_AREA;
? ? ? ? } else if (e.getY() >= top
? ? ? ? ? ? ? ? && e.getY() <= bottom
? ? ? ? ? ? ? ? && (((e.getX() > ((double) mOffsetHigh + mOffsetLow) / 2) && e.getX() < (mOffsetHigh - mThumbWidth / 2)) || (e
? ? ? ? ? ? ? ? .getX() > (mOffsetHigh + mThumbWidth/2) && e.getX() <= mScollBarWidth))) {
? ? ? ? ? ? return CLICK_IN_HIGH_AREA;
? ? ? ? } else if (!(e.getX() >= 0 && e.getX() <= mScollBarWidth && e.getY() >= top && e.getY() <= bottom)) {
? ? ? ? ? ? return CLICK_OUT_AREA;
? ? ? ? } else {
? ? ? ? ? ? return CLICK_INVAILD;
? ? ? ? }
? ? }
?
? ? //更新滑塊
? ? private void refresh() {
? ? ? ? invalidate();
? ? }
?
? ? //設(shè)置前滑塊的值
? ? public void setProgressLow(double ?progressLow) {
? ? ? ? this.defaultScreenLow = progressLow;
? ? ? ? mOffsetLow = formatDouble(progressLow / 100 * (mDistance ))+ mThumbWidth / 2;
? ? ? ? isEdit = true;
? ? ? ? refresh();
? ? }
?
? ? //設(shè)置后滑塊的值
? ? public void setProgressHigh(double ?progressHigh) {
? ? ? ? this.defaultScreenHigh = progressHigh;
? ? ? ? mOffsetHigh = formatDouble(progressHigh / 100 * (mDistance)) + mThumbWidth / 2;
? ? ? ? isEdit = true;
? ? ? ? refresh();
? ? }
?
? ? public void setOnSeekBarChangeListener(OnSeekBarChangeListener mListener) {
? ? ? ? this.mBarChangeListener = mListener;
? ? }
?
? ? //回調(diào)函數(shù),在滑動(dòng)時(shí)實(shí)時(shí)調(diào)用,改變輸入框的值
? ? public interface OnSeekBarChangeListener {
? ? ? ? //滑動(dòng)前
? ? ? ? public void onProgressBefore();
?
? ? ? ? //滑動(dòng)時(shí)
? ? ? ? public void onProgressChanged(SeekBarPressure seekBar, double progressLow,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? double progressHigh);
?
? ? ? ? //滑動(dòng)后
? ? ? ? public void onProgressAfter();
? ? }
?
/* ? ?private int formatInt(double value) {
? ? ? ? BigDecimal bd = new BigDecimal(value);
? ? ? ? BigDecimal bd1 = bd.setScale(0, BigDecimal.ROUND_HALF_UP);
? ? ? ? return bd1.intValue();
? ? }*/
?
? ? public static double formatDouble(double pDouble) {
? ? ? ? BigDecimal bd = new BigDecimal(pDouble);
? ? ? ? BigDecimal bd1 = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
? ? ? ? pDouble = bd1.doubleValue();
? ? ? ? return pDouble;
? ? }
?
}
2.activity_main.xml 布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ? ? xmlns:app="http://schemas.android.com/apk/res-auto" ? ? xmlns:tools="http://schemas.android.com/tools" ? ? android:layout_width="match_parent" ? ? android:layout_height="match_parent" ? ? tools:context=".MainActivity" ? ? android:background="#000" ? ? android:orientation="vertical"> ? ? ? <com.yjjk.doubleseekbarsss.SeekBarPressure ? ? ? ? android:id="@+id/seekBar_tg2" ? ? ? ? android:layout_width="match_parent" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:layout_alignParentTop="true" ? ? ? ? android:layout_marginBottom="10dp" ? ? ? ? android:layout_marginLeft="10dp" ? ? ? ? android:layout_marginRight="10dp" /> ? ? <TextView ? ? ? ? android:id="@+id/editTexts_min" ? ? ? ? android:layout_width="wrap_content" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:textSize="15sp" ? ? ? ? android:textColor="#fff"></TextView> ? ? <TextView ? ? ? ? android:id="@+id/editTexts_max" ? ? ? ? android:layout_width="wrap_content" ? ? ? ? android:layout_height="wrap_content" ? ? ? ? android:textSize="15sp" ? ? ? ? android:textColor="#fff"></TextView> ? ? </LinearLayout>
3.MainActivity
public class MainActivity extends AppCompatActivity {
?
? ? private boolean isScreen;
? ? @Override
? ? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? super.onCreate(savedInstanceState);
? ? ? ? setContentView(R.layout.activity_main);
?
? ? ? ? //id
? ? ? ? final SeekBarPressure seekBarPressures = findViewById(R.id.seekBar_tg2);
? ? ? ? final TextView editTexts_min = findViewById(R.id.editTexts_min);
? ? ? ? final TextView editTexts_max = findViewById(R.id.editTexts_max);
?
? ? ? ? seekBarPressures.setOnSeekBarChangeListener(new SeekBarPressure.OnSeekBarChangeListener() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onProgressBefore() {
? ? ? ? ? ? ? ? isScreen = true;
? ? ? ? ? ? }
?
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onProgressChanged(SeekBarPressure seekBar, double progressLow, double progressHigh) {
?
? ? ? ? ? ? ? ? editTexts_min.setText((int) progressLow + "");
? ? ? ? ? ? ? ? editTexts_max.setText((int) progressHigh + "");
?
? ? ? ? ? ? ? ? //獲取SharedPreferences對(duì)象
? ? ? ? ? ? ? ? SharedPreferences sharedPre=getSharedPreferences("config", MODE_PRIVATE);
?
? ? ? ? ? ? ? ? //獲取Editor對(duì)象
? ? ? ? ? ? ? ? SharedPreferences.Editor edit = sharedPre.edit();
? ? ? ? ? ? ? ? edit.clear();
?
? ? ? ? ? ? ? ? //設(shè)置參數(shù)
? ? ? ? ? ? ? ? edit.putString("progressHigh", String.valueOf(progressHigh));
? ? ? ? ? ? ? ? edit.putString("progressLow", String.valueOf(progressLow));
?
? ? ? ? ? ? ? ? //提交
? ? ? ? ? ? ? ? edit.commit();
?
? ? ? ? ? ? }
?
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onProgressAfter() {
? ? ? ? ? ? ? ? isScreen = false;
? ? ? ? ? ? }
? ? ? ? });
?
?
? ? ? ? //取值
? ? ? ? SharedPreferences sharedPre=getSharedPreferences("config",MODE_PRIVATE);
?
? ? ? ? String progressHighs = sharedPre.getString("progressHigh", "");
? ? ? ? String progressLows = sharedPre.getString("progressLow", "");
?
? ? ? ? if (progressHighs.length()!=0){
? ? ? ? ? ? seekBarPressures.setProgressHigh(Double.parseDouble(progressHighs));
? ? ? ? ? ? seekBarPressures.setProgressLow(Double.parseDouble(progressLows));
?
? ? ? ? ? ? editTexts_max.setText(progressHighs);
? ? ? ? ? ? editTexts_min.setText(progressLows);
? ? ? ? }else {
? ? ? ? ? ? seekBarPressures.setProgressLow(30);
? ? ? ? ? ? seekBarPressures.setProgressHigh(70);
?
? ? ? ? ? ? editTexts_min.setText("最小值:"+30);
? ? ? ? ? ? editTexts_max.setText("最大值:"+70);
? ? ? ? }
? ? }
}
原文鏈接:https://blog.csdn.net/weixin_42630638/article/details/108751790
相關(guān)推薦
- 2022-05-06 Docker?刪除及清理鏡像的方法_docker
- 2022-11-22 Android?10?啟動(dòng)分析之init語(yǔ)法詳解_Android
- 2024-03-08 Spring 事務(wù)失效的場(chǎng)景
- 2022-10-14 SpringCloud 微服務(wù)與遠(yuǎn)程調(diào)用測(cè)試
- 2022-07-01 python神經(jīng)網(wǎng)絡(luò)Densenet模型復(fù)現(xiàn)詳解_python
- 2022-09-08 pytorch中函數(shù)tensor.numpy()的數(shù)據(jù)類(lèi)型解析_python
- 2022-11-07 Docker搭建MySQ主從復(fù)制原理_docker
- 2024-02-01 啟動(dòng)jar報(bào)錯(cuò)(文件名、目錄名或卷標(biāo)語(yǔ)法不正確。)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支