From 1f4b6e483a85c60d2a0c2d4d9d4a33c1e9151c9c Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Thu, 14 Jun 2018 16:13:08 +0200 Subject: [PATCH] Updated seekbar appearance --- .../fdroid/views/LiveSeekBarPreference.java | 2 +- .../fdroid/views/SeekBarForegroundThumb.java | 85 ++++++++++++++++++ app/src/main/res/drawable/seekbar_fill.9.png | Bin 206 -> 0 bytes .../main/res/drawable/seekbar_progress.xml | 12 --- .../main/res/drawable/seekbar_tickmark.xml | 6 +- .../main/res/layout/preference_seekbar.xml | 4 +- app/src/main/res/values/styles.xml | 2 +- 7 files changed, 92 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java delete mode 100644 app/src/main/res/drawable/seekbar_fill.9.png delete mode 100644 app/src/main/res/drawable/seekbar_progress.xml diff --git a/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java index f1fda57f7..067a904ff 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java +++ b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java @@ -37,7 +37,7 @@ public class LiveSeekBarPreference extends SeekBarPreference { public void onBindViewHolder(final PreferenceViewHolder holder) { super.onBindViewHolder(holder); - SeekBar seekbar = holder.itemView.findViewById(R.id.seekbar); + SeekBarForegroundThumb seekbar = holder.itemView.findViewById(R.id.seekbar); seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { diff --git a/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java new file mode 100644 index 000000000..012e9a2c9 --- /dev/null +++ b/app/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java @@ -0,0 +1,85 @@ +package org.fdroid.fdroid.views; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.support.v7.widget.AppCompatSeekBar; +import android.util.AttributeSet; +import org.fdroid.fdroid.R; + +/** + * SeekBar that does not show the TickMark above the thumb + * Based on https://stackoverflow.com/a/47727128 + */ +public class SeekBarForegroundThumb extends AppCompatSeekBar { + private Drawable mTickMark; + private Context context; + + public SeekBarForegroundThumb(Context context) { + super(context); + init(context); + } + + public SeekBarForegroundThumb(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public SeekBarForegroundThumb(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + this.context = context; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mTickMark = context.getDrawable(R.drawable.seekbar_tickmark); + } else { + mTickMark = context.getResources().getDrawable(R.drawable.seekbar_tickmark); + } + } + + private Drawable getThumbCompat() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + return getThumb(); + } else { + return context.getResources().getDrawable(R.drawable.seekbar_thumb); + } + } + + @Override + protected synchronized void onDraw(Canvas canvas) { + super.onDraw(canvas); + drawTickMarks(canvas); + } + + @Override + public int getThumbOffset() { + return super.getThumbOffset(); + } + + private void drawTickMarks(Canvas canvas) { + if (mTickMark != null) { + final int count = getMax(); + if (count > 1) { + final int w = mTickMark.getIntrinsicWidth(); + final int h = mTickMark.getIntrinsicHeight(); + final int halfThumbW = getThumbCompat().getIntrinsicWidth() / 2; + final int halfW = w >= 0 ? w / 2 : 1; + final int halfH = h >= 0 ? h / 2 : 1; + mTickMark.setBounds(-halfW, -halfH, halfW, halfH); + final float spacing = (getWidth() - getPaddingLeft() - getPaddingRight() + getThumbOffset() * 2 - halfThumbW * 2) / (float) count; + final int saveCount = canvas.save(); + canvas.translate(getPaddingLeft() - getThumbOffset() + halfThumbW, getHeight() / 2); + for (int i = 0; i <= count; i++) { + if(i!=getProgress()) + mTickMark.draw(canvas); + canvas.translate(spacing, 0); + } + canvas.restoreToCount(saveCount); + } + } + } +} diff --git a/app/src/main/res/drawable/seekbar_fill.9.png b/app/src/main/res/drawable/seekbar_fill.9.png deleted file mode 100644 index 3d7427c0bdbd606cbb47e9d0ab327c7d166f9af1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)P!3HG%MVKuHQfx`y?k+$Y2!1;6t_M<_1s;*b z3=De8Ak0{?)V>TT$X?><>&pI!jYCjS^~TiCAR);T*N775{M_8syb=cIqSVBa)D(sC z%#sWRcTeAd@J2pypdvF*7sn8Z%gG52tp6oBI0XdSJvJSPh?N%5I?W^@At@oDz_N*D q5)+$R%G4KDA8(y>IT30xm!IKj2H%A3M|nZ6W$<+Mb6Mw<&;$Uj$u+tF diff --git a/app/src/main/res/drawable/seekbar_progress.xml b/app/src/main/res/drawable/seekbar_progress.xml deleted file mode 100644 index 72c15e8c5..000000000 --- a/app/src/main/res/drawable/seekbar_progress.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/seekbar_tickmark.xml b/app/src/main/res/drawable/seekbar_tickmark.xml index 7c11d874e..cae711ded 100644 --- a/app/src/main/res/drawable/seekbar_tickmark.xml +++ b/app/src/main/res/drawable/seekbar_tickmark.xml @@ -2,10 +2,10 @@ - + + android:width="6dp" + android:height="6dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/preference_seekbar.xml b/app/src/main/res/layout/preference_seekbar.xml index 06356ad03..b3b91d9a9 100644 --- a/app/src/main/res/layout/preference_seekbar.xml +++ b/app/src/main/res/layout/preference_seekbar.xml @@ -39,14 +39,14 @@ android:visibility="gone" android:textSize="0sp"/> - diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5f5980f83..ba1d52dce 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -319,6 +319,6 @@