Use SeekBar instead of Slider in GalleryActivity to be compatible with old devices
This commit is contained in:
1 parent
9ad1c9b050
commit
6c08f068d0
5 files changed
+151
-56
No files matched your search
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
+14
-15
@@ -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;
|
||||
}
|
||||
Reference in new issue
Block a user