[mobile] support long press seek

pull/123/head
FongMi 3 years ago
parent 8ee5c3b834
commit 83cb3d481a
  1. 20
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 54
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java
  3. 15
      app/src/mobile/res/drawable/shape_widget.xml
  4. 6
      app/src/mobile/res/layout/view_widget_vod.xml

@ -881,7 +881,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
@Override
public void onSeeking(int time) {
if (!isLock()) showState(time > 0 ? R.drawable.ic_widget_forward : R.drawable.ic_widget_rewind, time);
if (isLock()) return;
showState(time > 0 ? R.drawable.ic_widget_forward : R.drawable.ic_widget_rewind, time);
hideProgress();
}
@Override
@ -899,24 +901,24 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
@Override
public void onDoubleTap() {
if (mPlayers.isPlaying()) onPause(true);
else onPlay();
hideControl();
}
public void onDoubleTapLeft() {
mPlayers.seekTo(-15 * 1000);
showState(R.drawable.ic_widget_rewind);
App.post(mR4, 500);
hideProgress();
}
@Override
public void onDoubleTapRight() {
mPlayers.seekTo(15 * 1000);
showState(R.drawable.ic_widget_forward);
App.post(mR4, 500);
}
@Override
public void onDoubleTapCenter() {
if (mPlayers.isPlaying()) onPause(true);
else onPlay();
hideControl();
hideProgress();
}
@Override

@ -6,12 +6,15 @@ import android.view.MotionEvent;
import androidx.annotation.NonNull;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.Constant;
import com.fongmi.android.tv.utils.ResUtil;
public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener {
private final GestureDetector detector;
private final Listener listener;
private Runnable runnable;
private boolean touch;
private boolean seek;
private int time;
@ -26,7 +29,7 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener {
}
public boolean onTouchEvent(MotionEvent e) {
if (seek && e.getAction() == MotionEvent.ACTION_UP) listener.onSeekTo(time);
if (seek && e.getAction() == MotionEvent.ACTION_UP) seekDone();
return detector.onTouchEvent(e);
}
@ -39,6 +42,16 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener {
return true;
}
@Override
public void onLongPress(@NonNull MotionEvent e) {
int base = ResUtil.getScreenWidthPx() / 3;
boolean left = e.getX() > 0 && e.getX() < base;
boolean right = e.getX() > base * 2 && e.getX() < base * 3;
if (left) App.post(runnable = this::subTime, 0);
if (right) App.post(runnable = this::addTime, 0);
seek = left || right;
}
@Override
public boolean onScroll(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) {
int deltaX = (int) (e2.getX() - e1.getX());
@ -54,13 +67,7 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDoubleTap(@NonNull MotionEvent e) {
int base = ResUtil.getScreenWidthPx() / 3;
boolean left = e.getX() > 0 && e.getX() < base;
boolean center = e.getX() > base && e.getX() < base * 2;
boolean right = e.getX() > base * 2 && e.getX() < base * 3;
if (left) listener.onDoubleTapLeft();
if (right) listener.onDoubleTapRight();
if (center) listener.onDoubleTapCenter();
listener.onDoubleTap();
return true;
}
@ -70,6 +77,31 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener {
return true;
}
private void addTime() {
listener.onSeeking(time = time + Constant.INTERVAL_SEEK);
App.post(runnable, getDelay());
}
private void subTime() {
listener.onSeeking(time = time - Constant.INTERVAL_SEEK);
App.post(runnable, getDelay());
}
private int getDelay() {
int count = Math.abs(time) / Constant.INTERVAL_SEEK;
if (count < 5) return 500;
else if (count < 10) return 250;
else if (count < 15) return 100;
else return 50;
}
private void seekDone() {
App.removeCallbacks(runnable);
listener.onSeekTo(time);
seek = false;
time = 0;
}
public interface Listener {
void onSeeking(int time);
@ -78,10 +110,6 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener {
void onSingleTap();
void onDoubleTapLeft();
void onDoubleTapRight();
void onDoubleTapCenter();
void onDoubleTap();
}
}

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/black_50" />
<corners android:radius="8dp" />
<padding
android:bottom="8dp"
android:left="16dp"
android:right="16dp"
android:top="8dp" />
</shape>

@ -59,8 +59,8 @@
android:id="@+id/state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|top"
android:layout_margin="16dp"
android:layout_gravity="center"
android:background="@drawable/shape_widget"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone"
@ -70,7 +70,7 @@
android:id="@+id/action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="4dp"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_widget_rewind" />
<TextView

Loading…
Cancel
Save