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"> + + + +