diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java
index c64f4a4cb..6bf470122 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java
@@ -36,6 +36,7 @@ import android.view.View;
import android.view.WindowManager;
import android.webkit.MimeTypeMap;
import android.widget.FrameLayout;
+import android.widget.SeekBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
@@ -53,12 +54,12 @@ import com.hippo.ehviewer.gallery.gl.GalleryPageView;
import com.hippo.ehviewer.gallery.gl.GalleryView;
import com.hippo.ehviewer.gallery.gl.ImageView;
import com.hippo.ehviewer.widget.GalleryGuideView;
+import com.hippo.ehviewer.widget.ReversibleSeekBar;
import com.hippo.gl.glrenderer.ImageTexture;
import com.hippo.gl.view.GLRootView;
import com.hippo.image.Image;
import com.hippo.unifile.UniFile;
import com.hippo.util.SystemUiHelper;
-import com.hippo.widget.Slider;
import com.hippo.yorozuya.AnimationUtils;
import com.hippo.yorozuya.ConcurrentPool;
import com.hippo.yorozuya.SimpleAnimatorListener;
@@ -68,7 +69,7 @@ import com.hippo.yorozuya.ViewUtils;
import java.io.File;
public class GalleryActivity extends EhActivity
- implements GalleryProviderListener, Slider.OnSetProgressListener,
+ implements GalleryProviderListener, SeekBar.OnSeekBarChangeListener,
GalleryView.Listener {
public static final String ACTION_DIR = "dir";
@@ -107,13 +108,13 @@ public class GalleryActivity extends EhActivity
@Nullable
private View mBattery;
@Nullable
- private View mSliderPanel;
+ private View mSeekBarPanel;
@Nullable
private TextView mLeftText;
@Nullable
private TextView mRightText;
@Nullable
- private Slider mSlider;
+ private ReversibleSeekBar mSeekBar;
private int mLayoutMode;
private int mSize;
@@ -124,8 +125,8 @@ public class GalleryActivity extends EhActivity
private final Runnable mRequestLayoutSliderTask = new Runnable() {
@Override
public void run() {
- if (mSliderPanel != null) {
- mSliderPanel.requestLayout();
+ if (mSeekBarPanel != null) {
+ mSeekBarPanel.requestLayout();
}
}
};
@@ -133,8 +134,8 @@ public class GalleryActivity extends EhActivity
private final SimpleAnimatorListener mHideSliderListener = new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
- if (mSliderPanel != null) {
- mSliderPanel.setVisibility(View.INVISIBLE);
+ if (mSeekBarPanel != null) {
+ mSeekBarPanel.setVisibility(View.INVISIBLE);
}
}
};
@@ -142,8 +143,8 @@ public class GalleryActivity extends EhActivity
private final Runnable mHideSliderRunnable = new Runnable() {
@Override
public void run() {
- if (mSliderPanel != null) {
- hideSlider(mSliderPanel);
+ if (mSeekBarPanel != null) {
+ hideSlider(mSeekBarPanel);
}
}
};
@@ -259,11 +260,11 @@ public class GalleryActivity extends EhActivity
mClock.setVisibility(Settings.getShowClock() ? View.VISIBLE : View.GONE);
mBattery.setVisibility(Settings.getShowBattery() ? View.VISIBLE : View.GONE);
- mSliderPanel = findViewById(R.id.slider_panel);
- mLeftText = (TextView) mSliderPanel.findViewById(R.id.left);
- mRightText = (TextView) mSliderPanel.findViewById(R.id.right);
- mSlider = (Slider) mSliderPanel.findViewById(R.id.slider);
- mSlider.setOnSetProgressListener(this);
+ mSeekBarPanel = findViewById(R.id.seek_bar_panel);
+ mLeftText = (TextView) mSeekBarPanel.findViewById(R.id.left);
+ mRightText = (TextView) mSeekBarPanel.findViewById(R.id.right);
+ mSeekBar = (ReversibleSeekBar) mSeekBarPanel.findViewById(R.id.seek_bar);
+ mSeekBar.setOnSeekBarChangeListener(this);
mSize = mGalleryProvider.size();
mCurrentIndex = startPage;
@@ -277,10 +278,10 @@ public class GalleryActivity extends EhActivity
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
- //if (Settings.getGuideGallery()) {
+ if (Settings.getGuideGallery()) {
FrameLayout mainLayout = (FrameLayout) ViewUtils.$$(this, R.id.main);
mainLayout.addView(new GalleryGuideView(this));
- //}
+ }
}
@Override
@@ -297,10 +298,10 @@ public class GalleryActivity extends EhActivity
mGalleryProvider = null;
}
- mSliderPanel = null;
+ mSeekBarPanel = null;
mLeftText = null;
mRightText = null;
- mSlider = null;
+ mSeekBar = null;
}
@Override
@@ -429,7 +430,7 @@ public class GalleryActivity extends EhActivity
@SuppressLint("SetTextI18n")
private void updateSlider() {
- if (mSlider == null || mRightText == null || mLeftText == null || mSize <= 0 || mCurrentIndex < 0) {
+ if (mSeekBar == null || mRightText == null || mLeftText == null || mSize <= 0 || mCurrentIndex < 0) {
return;
}
@@ -438,16 +439,16 @@ public class GalleryActivity extends EhActivity
if (mLayoutMode == GalleryView.LAYOUT_MODE_RIGHT_TO_LEFT) {
start = mRightText;
end = mLeftText;
- mSlider.setReverse(true);
+ mSeekBar.setReverse(true);
} else {
start = mLeftText;
end = mRightText;
- mSlider.setReverse(false);
+ mSeekBar.setReverse(false);
}
start.setText(Integer.toString(mCurrentIndex + 1));
end.setText(Integer.toString(mSize));
- mSlider.setRange(1, mSize);
- mSlider.setProgress(mCurrentIndex + 1);
+ mSeekBar.setMax(mSize - 1);
+ mSeekBar.setProgress(mCurrentIndex);
}
@Override
@@ -530,21 +531,31 @@ public class GalleryActivity extends EhActivity
}
@Override
- public void onSetProgress(Slider slider, int newProgress, int oldProgress,
- boolean byUser, boolean confirm) {
- if (confirm && byUser && mGalleryView != null) {
- mGalleryView.setCurrentPage(newProgress - 1);
+ @SuppressLint("SetTextI18n")
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ TextView start;
+ if (mLayoutMode == GalleryView.LAYOUT_MODE_RIGHT_TO_LEFT) {
+ start = mRightText;
+ } else {
+ start = mLeftText;
+ }
+ if (fromUser && null != start) {
+ start.setText(Integer.toString(progress + 1));
}
}
@Override
- public void onFingerDown() {
+ public void onStartTrackingTouch(SeekBar seekBar) {
SimpleHandler.getInstance().removeCallbacks(mHideSliderRunnable);
}
@Override
- public void onFingerUp() {
+ public void onStopTrackingTouch(SeekBar seekBar) {
SimpleHandler.getInstance().postDelayed(mHideSliderRunnable, HIDE_SLIDER_DELAY);
+ int progress = seekBar.getProgress();
+ if (progress != mCurrentIndex && null != mGalleryView) {
+ mGalleryView.setCurrentPage(progress);
+ }
}
@Override
@@ -786,16 +797,16 @@ public class GalleryActivity extends EhActivity
}
private void onTapSliderArea() {
- if (mSliderPanel == null || mSize <= 0 || mCurrentIndex < 0) {
+ if (mSeekBarPanel == null || mSize <= 0 || mCurrentIndex < 0) {
return;
}
SimpleHandler.getInstance().removeCallbacks(mHideSliderRunnable);
- if (mSliderPanel.getVisibility() == View.VISIBLE) {
- hideSlider(mSliderPanel);
+ if (mSeekBarPanel.getVisibility() == View.VISIBLE) {
+ hideSlider(mSeekBarPanel);
} else {
- showSlider(mSliderPanel);
+ showSlider(mSeekBarPanel);
SimpleHandler.getInstance().postDelayed(mHideSliderRunnable, HIDE_SLIDER_DELAY);
}
}
diff --git a/app/src/main/java/com/hippo/ehviewer/widget/ReversibleSeekBar.java b/app/src/main/java/com/hippo/ehviewer/widget/ReversibleSeekBar.java
new file mode 100644
index 000000000..01a710fa8
--- /dev/null
+++ b/app/src/main/java/com/hippo/ehviewer/widget/ReversibleSeekBar.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2016 Hippo Seven
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hippo.ehviewer.widget;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.support.v7.widget.AppCompatSeekBar;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+public class ReversibleSeekBar extends AppCompatSeekBar {
+
+ private boolean mReverse;
+
+ public ReversibleSeekBar(Context context) {
+ super(context);
+ }
+
+ public ReversibleSeekBar(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public ReversibleSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public void setReverse(boolean reverse) {
+ mReverse = reverse;
+ invalidate();
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ int saveCount = 0;
+ if (mReverse) {
+ saveCount = canvas.save();
+ float px = this.getWidth() / 2.0f;
+ float py = this.getHeight() / 2.0f;
+ canvas.scale(-1, 1, px, py);
+ }
+ super.draw(canvas);
+ if (mReverse) {
+ canvas.restoreToCount(saveCount);
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ float x = 0.0f, y = 0.0f;
+ if (mReverse) {
+ x = event.getX();
+ y = event.getY();
+ event.setLocation(getWidth() - x, y);
+ }
+ boolean result = super.onTouchEvent(event);
+ if (mReverse) {
+ event.setLocation(x, y);
+ }
+ return result;
+ }
+}
diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SliderPanel.java b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java
similarity index 69%
rename from app/src/main/java/com/hippo/ehviewer/widget/SliderPanel.java
rename to app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java
index 328d3a28c..674d14dc4 100644
--- a/app/src/main/java/com/hippo/ehviewer/widget/SliderPanel.java
+++ b/app/src/main/java/com/hippo/ehviewer/widget/SeekBarPanel.java
@@ -22,48 +22,47 @@ import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
+import android.widget.SeekBar;
-import com.hippo.widget.Slider;
+public class SeekBarPanel extends LinearLayout {
-public class SliderPanel extends LinearLayout {
+ private SeekBar mSeekBar;
- private Slider mSlider;
-
- public SliderPanel(Context context) {
+ public SeekBarPanel(Context context) {
super(context);
}
- public SliderPanel(Context context, AttributeSet attrs) {
+ public SeekBarPanel(Context context, AttributeSet attrs) {
super(context, attrs);
}
- public SliderPanel(Context context, AttributeSet attrs, int defStyleAttr) {
+ public SeekBarPanel(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void onViewAdded(View child) {
- if (child instanceof Slider) {
- mSlider = (Slider) child;
+ if (child instanceof SeekBar) {
+ mSeekBar = (SeekBar) child;
}
}
@Override
public void onViewRemoved(View child) {
- if (child == mSlider) {
- mSlider = null;
+ if (child == mSeekBar) {
+ mSeekBar = null;
}
}
@Override
public boolean onTouchEvent(@NonNull MotionEvent event) {
- if (mSlider == null) {
+ if (mSeekBar == null) {
return super.onTouchEvent(event);
} else {
- final float offsetX = -mSlider.getLeft();
- final float offsetY = -mSlider.getTop();
+ final float offsetX = -mSeekBar.getLeft();
+ final float offsetY = -mSeekBar.getTop();
event.offsetLocation(offsetX, offsetY);
- mSlider.onTouchEvent(event);
+ mSeekBar.onTouchEvent(event);
event.offsetLocation(-offsetX, -offsetY);
return true;
}
diff --git a/app/src/main/res/layout/activity_gallery.xml b/app/src/main/res/layout/activity_gallery.xml
index 41e641720..ec022a10f 100644
--- a/app/src/main/res/layout/activity_gallery.xml
+++ b/app/src/main/res/layout/activity_gallery.xml
@@ -47,8 +47,8 @@
app:color="@color/secondary_text_dark"
app:warningColor="@color/red_500"/>
-
-
-
+
diff --git a/app/src/main/res/layout/scene_select_site.xml b/app/src/main/res/layout/scene_select_site.xml
index 45da49e3e..466501d2b 100644
--- a/app/src/main/res/layout/scene_select_site.xml
+++ b/app/src/main/res/layout/scene_select_site.xml
@@ -25,7 +25,8 @@
+ android:layout_weight="1"
+ android:fillViewport="true">
+
+
+
+