Optimize collect

pull/605/head
jhengazuki 6 months ago
parent 1f2bcef5f0
commit d9185fe431
  1. 2
      app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/ui/adapter/BaseDiffAdapter.java
  3. 16
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 34
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/CollectFragment.java

@ -112,7 +112,7 @@ public class WallConfig {
}
private void createSnapshot(File file) throws Exception {
Bitmap bitmap = Glide.with(App.get()).asBitmap().load(file).override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).submit().get();
Bitmap bitmap = Glide.with(App.get()).asBitmap().frame(0).load(file).override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).submit().get();
try (FileOutputStream fos = new FileOutputStream(FileUtil.getWallCache())) {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
}

@ -37,9 +37,13 @@ public abstract class BaseDiffAdapter<T extends Diffable<T>, VH extends Recycler
}
public void addItem(T item) {
addItem(item, null);
}
public void addItem(T item, Runnable commitCallback) {
List<T> current = new ArrayList<>(getItems());
current.add(item);
setItems(current);
setItems(current, commitCallback);
}
public void addItems(List<T> items) {

@ -124,13 +124,13 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private Observer<Result> mObserveSearch;
private EpisodeAdapter mEpisodeAdapter;
private QualityAdapter mQualityAdapter;
private ValueAnimator mHeightAnimator;
private ControlDialog mControlDialog;
private QuickAdapter mQuickAdapter;
private ParseAdapter mParseAdapter;
private ExecutorService mExecutor;
private SiteViewModel mViewModel;
private FlagAdapter mFlagAdapter;
private ValueAnimator mAnimator;
private CustomKeyDown mKeyDown;
private List<String> mBroken;
private History mHistory;
@ -400,9 +400,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
}
private void setAnimator() {
mHeightAnimator = new ValueAnimator();
mHeightAnimator.setInterpolator(new DecelerateInterpolator());
mHeightAnimator.addUpdateListener(animation -> {
mAnimator = new ValueAnimator();
mAnimator.setInterpolator(new DecelerateInterpolator());
mAnimator.addUpdateListener(animation -> {
mFrameParams.height = (int) animation.getAnimatedValue();
mBinding.video.setLayoutParams(mFrameParams);
});
@ -1219,10 +1219,10 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
int calculated = (int) (parentWidth * ((float) videoHeight / videoWidth));
int finalHeight = Math.max(minHeight, Math.min(maxHeight, calculated));
if (finalHeight == mBinding.video.getHeight()) return;
if (mHeightAnimator.isRunning()) mHeightAnimator.cancel();
mHeightAnimator.setIntValues(mBinding.video.getHeight(), finalHeight);
mHeightAnimator.setDuration(300);
mHeightAnimator.start();
if (mAnimator.isRunning()) mAnimator.cancel();
mAnimator.setIntValues(mBinding.video.getHeight(), finalHeight);
mAnimator.setDuration(300);
mAnimator.start();
}
private void checkEnded(boolean notify) {

@ -1,5 +1,6 @@
package com.fongmi.android.tv.ui.fragment;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
@ -43,6 +44,7 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
private CustomScroller mScroller;
private SiteViewModel mViewModel;
private PauseExecutor mExecutor;
private ValueAnimator mAnimator;
private int maxWidth;
public static CollectFragment newInstance(String keyword) {
@ -74,17 +76,17 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
@Override
protected void initView() {
maxWidth = ResUtil.getScreenWidth() / (ResUtil.isLand(requireActivity()) ? 3 : 2) - ResUtil.dp2px(32);
maxWidth = ResUtil.getScreenWidth() / (getCount() + 1) - ResUtil.dp2px(32);
mScroller = new CustomScroller(this);
setRecyclerView();
setViewModel();
setAnimator();
search();
}
private void setRecyclerView() {
mBinding.collect.setMaxWidth(maxWidth);
mBinding.collect.setItemAnimator(null);
mBinding.collect.setHasFixedSize(false);
mBinding.collect.setHasFixedSize(true);
mBinding.collect.setAdapter(mCollectAdapter = new CollectAdapter(this));
mBinding.recycler.setHasFixedSize(true);
mBinding.recycler.addOnScrollListener(mScroller);
@ -98,6 +100,15 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
mViewModel.result.observe(this, this::setSearch);
}
private void setAnimator() {
mAnimator = new ValueAnimator();
mAnimator.addUpdateListener(animation -> {
ViewGroup.LayoutParams params = mBinding.collect.getLayoutParams();
params.width = (Integer) animation.getAnimatedValue();
mBinding.collect.setLayoutParams(params);
});
}
private List<Site> getSites() {
List<Site> items = new ArrayList<>();
for (Site site : VodConfig.get().getSites()) if (site.isSearchable()) items.add(site);
@ -128,10 +139,25 @@ public class CollectFragment extends BaseFragment implements MenuProvider, Colle
private void setCollect(Result result) {
if (result == null) return;
if (mCollectAdapter.getPosition() == 0) mSearchAdapter.addItems(result.getList());
mCollectAdapter.addItem(Collect.create(result.getList()));
mCollectAdapter.addItem(Collect.create(result.getList()), this::setWidth);
mCollectAdapter.add(result.getList());
}
private void setWidth() {
int maxTextWidth = 0;
int space = ResUtil.dp2px(48);
for (Collect item : mCollectAdapter.getItems()) maxTextWidth = Math.max(maxTextWidth, ResUtil.getTextWidth(item.getSite().getName(), 14));
int contentWidth = maxTextWidth + space;
int minWidth = ResUtil.dp2px(120);
int finalWidth = Math.max(minWidth, Math.min(contentWidth, maxWidth));
int startWidth = mBinding.collect.getWidth();
if (finalWidth == startWidth) return;
if (mAnimator.isRunning()) mAnimator.cancel();
mAnimator.setIntValues(startWidth, finalWidth);
mAnimator.setDuration(300);
mAnimator.start();
}
private void setSearch(Result result) {
if (result == null) return;
boolean same = !result.getList().isEmpty() && mCollectAdapter.getActivated().getSite().equals(result.getList().get(0).getSite());

Loading…
Cancel
Save