Commit 410d9662 by 段启岩

指示器优化

parent 37371771
...@@ -10,12 +10,13 @@ import androidx.fragment.app.FragmentStatePagerAdapter; ...@@ -10,12 +10,13 @@ import androidx.fragment.app.FragmentStatePagerAdapter;
import java.util.List; import java.util.List;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.CommonCategory;
import cn.yunliyunwai.beyondclouds.ui.HomeFragment; import cn.yunliyunwai.beyondclouds.ui.HomeFragment;
public class CategoryFragmentAdapter extends FragmentStatePagerAdapter { public class CategoryFragmentAdapter extends FragmentStatePagerAdapter {
private List<BlogCategory> categories; private List<CommonCategory> categories;
public CategoryFragmentAdapter(@NonNull FragmentManager fm, List<BlogCategory> categories) { public CategoryFragmentAdapter(@NonNull FragmentManager fm, List<CommonCategory> categories) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
this.categories = categories; this.categories = categories;
} }
...@@ -25,7 +26,7 @@ public class CategoryFragmentAdapter extends FragmentStatePagerAdapter { ...@@ -25,7 +26,7 @@ public class CategoryFragmentAdapter extends FragmentStatePagerAdapter {
public Fragment getItem(int position) { public Fragment getItem(int position) {
HomeFragment.BlogListFragment fragment = HomeFragment.BlogListFragment.newInstance(); HomeFragment.BlogListFragment fragment = HomeFragment.BlogListFragment.newInstance();
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putInt("categoryId", categories.get(position).getCategoryId()); bundle.putParcelable("category", categories.get(position));
fragment.setArguments(bundle); fragment.setArguments(bundle);
return fragment; return fragment;
} }
......
...@@ -14,17 +14,18 @@ import java.util.List; ...@@ -14,17 +14,18 @@ import java.util.List;
import cn.yunliyunwai.beyondclouds.R; import cn.yunliyunwai.beyondclouds.R;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.CommonCategory;
import cn.yunliyunwai.beyondclouds.util.TypeFaces; import cn.yunliyunwai.beyondclouds.util.TypeFaces;
import cn.yunliyunwai.beyondclouds.view.CommonPagerIndicator; import cn.yunliyunwai.beyondclouds.view.CommonPagerIndicator;
import cn.yunliyunwai.beyondclouds.view.ScaleTransitionPagerTitleView; import cn.yunliyunwai.beyondclouds.view.ScaleTransitionPagerTitleView;
public class HomeNavigatorAdapter extends CommonNavigatorAdapter { public class HomeNavigatorAdapter extends CommonNavigatorAdapter {
private List<BlogCategory> categories; private List<CommonCategory> categories;
private ViewPager viewPager; private ViewPager viewPager;
public HomeNavigatorAdapter(List<BlogCategory> categories, ViewPager viewPager) { public HomeNavigatorAdapter(List<CommonCategory> categories, ViewPager viewPager) {
this.categories = categories; this.categories = categories;
this.viewPager = viewPager; this.viewPager = viewPager;
} }
...@@ -36,11 +37,10 @@ public class HomeNavigatorAdapter extends CommonNavigatorAdapter { ...@@ -36,11 +37,10 @@ public class HomeNavigatorAdapter extends CommonNavigatorAdapter {
@Override @Override
public IPagerTitleView getTitleView(Context context, int index) { public IPagerTitleView getTitleView(Context context, int index) {
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = ScaleTransitionPagerTitleView.createDefaultTitleView(context); ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = ScaleTransitionPagerTitleView.createDefaultTitleView(context, index);
scaleTransitionPagerTitleView.setText(categories.get(index).getCategory()); scaleTransitionPagerTitleView.setText(categories.get(index).getCategoryName());
scaleTransitionPagerTitleView.setTypeface(Typeface.DEFAULT); scaleTransitionPagerTitleView.setTypeface(Typeface.DEFAULT);
// TextUtils.
scaleTransitionPagerTitleView.setOnClickListener(view -> viewPager.setCurrentItem(index)); scaleTransitionPagerTitleView.setOnClickListener(view -> viewPager.setCurrentItem(index));
return scaleTransitionPagerTitleView; return scaleTransitionPagerTitleView;
} }
...@@ -53,7 +53,7 @@ public class HomeNavigatorAdapter extends CommonNavigatorAdapter { ...@@ -53,7 +53,7 @@ public class HomeNavigatorAdapter extends CommonNavigatorAdapter {
indicator.setMode(CommonPagerIndicator.MODE_EXACTLY); indicator.setMode(CommonPagerIndicator.MODE_EXACTLY);
indicator.setDrawableHeight(2 * density); indicator.setDrawableHeight(2 * density);
indicator.setDrawableWidth(8 * density); indicator.setDrawableWidth(8 * density);
indicator.setX(6 * density); indicator.setX(2 * density);
return indicator; return indicator;
} }
......
package cn.yunliyunwai.beyondclouds.data.model;
import android.os.Parcel;
import android.os.Parcelable;
import lombok.Data;
@Data
public class CommonCategory implements Parcelable {
private static final String CATEGORY_NAME_RECOMMEND = "推荐";
private static final String CATEGORY_NAME_LATEST = "最新";
private static final String CATEGORY_NAME_HOTS = "热门";
protected CommonCategory(Parcel in) {
if (in.readByte() == 0) {
categoryId = null;
} else {
categoryId = in.readInt();
}
categoryName = in.readString();
categoryType = in.readParcelable(CategoryType.class.getClassLoader());
}
public static final Creator<CommonCategory> CREATOR = new Creator<CommonCategory>() {
@Override
public CommonCategory createFromParcel(Parcel in) {
return new CommonCategory(in);
}
@Override
public CommonCategory[] newArray(int size) {
return new CommonCategory[size];
}
};
public CommonCategory(Integer categoryId, String categoryName, CategoryType categoryType) {
this.categoryId = categoryId;
this.categoryName = categoryName;
this.categoryType = categoryType;
}
private Integer categoryId;
private String categoryName;
private CategoryType categoryType;
public static CommonCategory recommend() {
return new CommonCategory(null, CATEGORY_NAME_RECOMMEND, CategoryType.RECOMMEND);
}
public static CommonCategory latest() {
return new CommonCategory(null, CATEGORY_NAME_LATEST, CategoryType.LATEST);
}
public static CommonCategory hots() {
return new CommonCategory(null, CATEGORY_NAME_HOTS, CategoryType.HOTS);
}
public static CommonCategory real(Integer categoryId, String categoryName) {
return new CommonCategory(categoryId, categoryName, CategoryType.REAL);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(categoryId);
dest.writeParcelable(categoryType, 0);
dest.writeString(categoryName);
}
public enum CategoryType implements Parcelable {
RECOMMEND(0),
HOTS(1),
LATEST(2),
REAL(3);
private int value;
CategoryType(int value) {
this.value = value;
}
public static final Creator<CategoryType> CREATOR = new Creator<CategoryType>() {
@Override
public CategoryType createFromParcel(Parcel in) {
return CategoryType.values()[in.readInt()];
}
@Override
public CategoryType[] newArray(int size) {
return new CategoryType[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
}
}
...@@ -47,4 +47,9 @@ public class BlogRepositoryImpl implements IBlogRepository { ...@@ -47,4 +47,9 @@ public class BlogRepositoryImpl implements IBlogRepository {
public void saveCategories(List<BlogCategory> categories) { public void saveCategories(List<BlogCategory> categories) {
blogDatabase.blogDao().saveCategories(categories); blogDatabase.blogDao().saveCategories(categories);
} }
@Override
public LiveData<Result<Page<Blog>>> getHotBlogList(Integer page, int pageSize) {
return blogApiStore.getHotBlogList(page, pageSize);
}
} }
...@@ -21,4 +21,6 @@ public interface IBlogRepository { ...@@ -21,4 +21,6 @@ public interface IBlogRepository {
LiveData<Result<Page<Blog>>> getBlogList(Integer categoryId, Integer page, Integer size); LiveData<Result<Page<Blog>>> getBlogList(Integer categoryId, Integer page, Integer size);
void saveCategories(List<BlogCategory> data); void saveCategories(List<BlogCategory> data);
LiveData<Result<Page<Blog>>> getHotBlogList(Integer page, int pageSize);
} }
...@@ -12,7 +12,7 @@ import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; ...@@ -12,7 +12,7 @@ import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
@Dao @Dao
public interface BlogDao { public interface BlogDao {
@Query("SELECT * FROM BlogCategory order by priority desc, create_time desc") @Query("SELECT * FROM BlogCategory order by priority desc, create_time asc")
LiveData<List<BlogCategory>> getCategories(); LiveData<List<BlogCategory>> getCategories();
@Insert(onConflict = OnConflictStrategy.REPLACE) @Insert(onConflict = OnConflictStrategy.REPLACE)
......
...@@ -19,4 +19,8 @@ public interface BlogApiStore { ...@@ -19,4 +19,8 @@ public interface BlogApiStore {
LiveData<Result<Page<Blog>>> getBlogList(@Query("categoryId") Integer categoryId, LiveData<Result<Page<Blog>>> getBlogList(@Query("categoryId") Integer categoryId,
@Query("page") Integer page, @Query("page") Integer page,
@Query("size") Integer size); @Query("size") Integer size);
@GET("blog/hots")
LiveData<Result<Page<Blog>>> getHotBlogList( @Query("page") Integer page,
@Query("size") int pageSize);
} }
...@@ -30,6 +30,7 @@ import cn.yunliyunwai.beyondclouds.adapter.CategoryFragmentAdapter; ...@@ -30,6 +30,7 @@ import cn.yunliyunwai.beyondclouds.adapter.CategoryFragmentAdapter;
import cn.yunliyunwai.beyondclouds.adapter.HomeNavigatorAdapter; import cn.yunliyunwai.beyondclouds.adapter.HomeNavigatorAdapter;
import cn.yunliyunwai.beyondclouds.base.BaseFragment; import cn.yunliyunwai.beyondclouds.base.BaseFragment;
import cn.yunliyunwai.beyondclouds.data.model.Blog; import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.data.model.CommonCategory;
import cn.yunliyunwai.beyondclouds.data.model.Page; import cn.yunliyunwai.beyondclouds.data.model.Page;
import cn.yunliyunwai.beyondclouds.data.model.Result; import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.databinding.FragmentBlogListBinding; import cn.yunliyunwai.beyondclouds.databinding.FragmentBlogListBinding;
...@@ -93,7 +94,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -93,7 +94,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
public static class BlogListFragment extends BaseFragment<BlogListFragmentViewModel, FragmentBlogListBinding> implements SwipeRefreshLayout.OnRefreshListener { public static class BlogListFragment extends BaseFragment<BlogListFragmentViewModel, FragmentBlogListBinding> implements SwipeRefreshLayout.OnRefreshListener {
private Integer categoryId; private CommonCategory category;
private BlogListAdapter blogListAdapter; private BlogListAdapter blogListAdapter;
...@@ -112,7 +113,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -112,7 +113,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
if (null != getArguments()) { if (null != getArguments()) {
categoryId = getArguments().getInt("categoryId"); category = getArguments().getParcelable("category");
} }
} }
...@@ -162,7 +163,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -162,7 +163,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
blogListAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { blogListAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
@Override @Override
public void onLoadMoreRequested() { public void onLoadMoreRequested() {
binding.getViewModel().loadBlogPage(categoryId, viewModel.getCurrentPage() + 1); binding.getViewModel().loadBlogPage(category, viewModel.getCurrentPage() + 1);
} }
}, binding.blogRecyclerView); }, binding.blogRecyclerView);
...@@ -181,7 +182,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo ...@@ -181,7 +182,7 @@ public class HomeFragment extends BaseFragment<HomeFragmentViewModel, FragmentHo
@Override @Override
public void onRefresh() { public void onRefresh() {
viewModel.loadBlogPage(categoryId, 1); viewModel.loadBlogPage(category, 1);
} }
} }
......
...@@ -40,14 +40,22 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView ...@@ -40,14 +40,22 @@ public class ScaleTransitionPagerTitleView extends ColorTransitionPagerTitleView
mMinScale = minScale; mMinScale = minScale;
} }
public static ScaleTransitionPagerTitleView createDefaultTitleView(Context context) { public static ScaleTransitionPagerTitleView createDefaultTitleView(Context context, int index) {
float density = context.getResources().getDisplayMetrics().density; float density = context.getResources().getDisplayMetrics().density;
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context); ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context);
scaleTransitionPagerTitleView.setTextSize(18); scaleTransitionPagerTitleView.setTextSize(18);
scaleTransitionPagerTitleView.setMinScale(0.8f); scaleTransitionPagerTitleView.setMinScale(0.8f);
int paddingTop = scaleTransitionPagerTitleView.getPaddingTop(); int paddingTop = scaleTransitionPagerTitleView.getPaddingTop();
int paddingBottom = scaleTransitionPagerTitleView.getPaddingTop(); int paddingBottom = scaleTransitionPagerTitleView.getPaddingTop();
scaleTransitionPagerTitleView.setPadding((int) (10 * density), paddingTop, (int) (0 * density), paddingBottom); int paddingLeft = (int) (6 * density);
int paddingRight = (int) (6 * density);
if (index == 0) {
paddingLeft = (int) (12 * density);
}
if (index == 0) {
paddingRight = (int) (12 * density);
}
scaleTransitionPagerTitleView.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
scaleTransitionPagerTitleView.setNormalColor(context.getResources().getColor(R.color.colorText)); scaleTransitionPagerTitleView.setNormalColor(context.getResources().getColor(R.color.colorText));
scaleTransitionPagerTitleView.setSelectedColor(context.getResources().getColor(R.color.colorTextAccent)); scaleTransitionPagerTitleView.setSelectedColor(context.getResources().getColor(R.color.colorTextAccent));
scaleTransitionPagerTitleView.setGravity(Gravity.CENTER_VERTICAL); scaleTransitionPagerTitleView.setGravity(Gravity.CENTER_VERTICAL);
......
...@@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModel; ...@@ -8,6 +8,7 @@ import androidx.lifecycle.ViewModel;
import javax.inject.Inject; import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.data.model.Blog; import cn.yunliyunwai.beyondclouds.data.model.Blog;
import cn.yunliyunwai.beyondclouds.data.model.CommonCategory;
import cn.yunliyunwai.beyondclouds.data.model.Page; import cn.yunliyunwai.beyondclouds.data.model.Page;
import cn.yunliyunwai.beyondclouds.data.model.Result; import cn.yunliyunwai.beyondclouds.data.model.Result;
import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository; import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
...@@ -32,15 +33,24 @@ public class BlogListFragmentViewModel extends ViewModel { ...@@ -32,15 +33,24 @@ public class BlogListFragmentViewModel extends ViewModel {
this.blogRepository = blogRepository; this.blogRepository = blogRepository;
} }
public void loadBlogPage(Integer categoryId, Integer page) { public void loadBlogPage(CommonCategory category, Integer page) {
blogRepository.getBlogList(categoryId, page, PAGE_SIZE).observeForever(new Observer<Result<Page<Blog>>>() { Observer<Result<Page<Blog>>> resultObserver = new Observer<Result<Page<Blog>>>() {
@Override @Override
public void onChanged(Result<Page<Blog>> pageResult) { public void onChanged(Result<Page<Blog>> pageResult) {
if (pageResult.getCode() == 0) { if (pageResult.getCode() == 0) {
currentPage = page; currentPage = page;
}
blogLoadResult.setValue(pageResult);
} }
blogLoadResult.setValue(pageResult); };
}
}); switch (category.getCategoryType()) {
case REAL:
blogRepository.getBlogList(category.getCategoryId(), page, PAGE_SIZE).observeForever(resultObserver);
break;
case RECOMMEND:
default:
blogRepository.getHotBlogList(page, PAGE_SIZE).observeForever(resultObserver);
}
} }
} }
...@@ -5,25 +5,30 @@ import androidx.lifecycle.MutableLiveData; ...@@ -5,25 +5,30 @@ import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModel;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import cn.yunliyunwai.beyondclouds.data.model.BlogCategory; import cn.yunliyunwai.beyondclouds.data.model.BlogCategory;
import cn.yunliyunwai.beyondclouds.data.model.CommonCategory;
import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository; import cn.yunliyunwai.beyondclouds.data.source.IBlogRepository;
public class HomeFragmentViewModel extends ViewModel { public class HomeFragmentViewModel extends ViewModel {
private static final String TAG = HomeFragmentViewModel.class.getCanonicalName(); private static final String TAG = HomeFragmentViewModel.class.getCanonicalName();
IBlogRepository blogRepository; IBlogRepository blogRepository;
private MutableLiveData<List<CommonCategory>> homeCategories = new MutableLiveData<>();
@Inject @Inject
public HomeFragmentViewModel(IBlogRepository blogRepository) { public HomeFragmentViewModel(IBlogRepository blogRepository) {
this.blogRepository = blogRepository; this.blogRepository = blogRepository;
homeCategories.setValue(Arrays.asList(CommonCategory.recommend()));
} }
private MutableLiveData<List<BlogCategory>> homeCategories = new MutableLiveData<>(); public LiveData<List<CommonCategory>> getHomeCategories() {
public LiveData<List<BlogCategory>> getHomeCategories() {
return homeCategories; return homeCategories;
} }
...@@ -31,7 +36,13 @@ public class HomeFragmentViewModel extends ViewModel { ...@@ -31,7 +36,13 @@ public class HomeFragmentViewModel extends ViewModel {
blogRepository.loadCategoriesFromLocal().observeForever(new Observer<List<BlogCategory>>() { blogRepository.loadCategoriesFromLocal().observeForever(new Observer<List<BlogCategory>>() {
@Override @Override
public void onChanged(List<BlogCategory> blogCategories) { public void onChanged(List<BlogCategory> blogCategories) {
homeCategories.setValue(blogCategories); List<CommonCategory> commonCategories = new ArrayList<>(50);
commonCategories.addAll(homeCategories.getValue());
for (BlogCategory category :
blogCategories) {
commonCategories.add(CommonCategory.real(category.getCategoryId(), category.getCategory()));
}
homeCategories.setValue(commonCategories);
} }
}); });
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment