卡片切换效果

This commit is contained in:
zhangyuanzhen
2020-03-17 21:35:23 +08:00
parent 0a277721d7
commit bb3a238815
6 changed files with 79 additions and 21 deletions

View File

@@ -83,13 +83,22 @@ public class AppNavigatorFragment extends MvpFragment<AppNavigatorView, AppNavig
scroller.addOnItemChangedListener(this);
scroller.addScrollStateChangeListener(this);
//scroller.setItemTransitionTimeMillis(DiscreteScrollViewOptions.getTransitionTime());
apps = NavigatorApps.getApps();
scroller.setItemTransformer(new CardScaleTransformer.Builder()
.setMinScale(0.84f)
.build());
apps = NavigatorApps.getApps();
appIndicatorAdapter = new AppIndicatorAdapter(getContext(), apps);
appIndicatorAdapter.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
NavigatorApp item = (NavigatorApp) v.getTag();
AppServiceHandler.getMogoCardManager().switch2(item.mModuleType);
}
});
scroller.setAdapter(appIndicatorAdapter);
scroller.scrollToPosition(Integer.MAX_VALUE / 2 - 1);
//mNavigation.setOnClickListener( view -> {
@@ -185,9 +194,9 @@ public class AppNavigatorFragment extends MvpFragment<AppNavigatorView, AppNavig
Logger.d(TAG, "onCurrentItemChanged--position--" + i % CARD_SIZE);
int currentPosition = (i - 2) % CARD_SIZE;
if (!scroller.isComputingLayout()) {
appIndicatorAdapter.setCurrentPos(i);
}
//if (!scroller.isComputingLayout()) {
// appIndicatorAdapter.setCurrentPos(i);
//}
//this.currentPosition=currentPosition;
AppServiceHandler.getMogoCardManager().switch2(apps.get(i % CARD_SIZE).mModuleType);
@@ -238,10 +247,10 @@ public class AppNavigatorFragment extends MvpFragment<AppNavigatorView, AppNavig
if (index == 0) {
return;
}
if (index <= -5) {
index = 1;
} else if (index >= 5) {
index = -1;
if (index <= -3) {
index += CARD_SIZE;
} else if (index >= 3) {
index = index-CARD_SIZE;
}
//RecyclerView 的特性,如果是否在屏幕内
//if (index < 0) {

View File

@@ -19,6 +19,8 @@ public class AppIndicatorAdapter extends RecycleBaseAdapter<NavigatorApp> {
private int currentPos;
private View.OnClickListener onClickListener;
/**
*
*/
@@ -44,9 +46,15 @@ public class AppIndicatorAdapter extends RecycleBaseAdapter<NavigatorApp> {
tvTitle.setTextColor(ContextCompat.getColor(context,R.color.white_80));
ivIndicator.setImageResource(integer.getmUncheckedIconId());
}
holder.itemView.setTag(integer);
holder.itemView.setOnClickListener(onClickListener);
}
public void setOnClickListener(View.OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
public void setCurrentPos(int currentPos){
this.currentPos=currentPos;
notifyDataSetChanged();

View File

@@ -1,12 +1,17 @@
package com.mogo.module.apps.utils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.FloatRange;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.mogo.module.apps.R;
import com.mogo.module.apps.model.NavigatorApp;
import com.yarolegovich.discretescrollview.transform.DiscreteScrollItemTransformer;
import com.yarolegovich.discretescrollview.transform.Pivot;
import com.yarolegovich.discretescrollview.transform.ScaleTransformer;
import java.util.List;
/**
* @author zyz
@@ -18,6 +23,9 @@ public class CardScaleTransformer implements DiscreteScrollItemTransformer {
private Pivot pivotY;
private float minScale;
private float maxMinDiff;
private static final int CARD_SIZE = 6;
List<NavigatorApp> apps;
public CardScaleTransformer() {
pivotX = Pivot.X.CENTER.create();
@@ -26,16 +34,38 @@ public class CardScaleTransformer implements DiscreteScrollItemTransformer {
maxMinDiff = 0.2f;
}
public void setApps(List<NavigatorApp> apps) {
this.apps = apps;
}
@Override
public void transformItem(View item, RecyclerView.ViewHolder childViewHolder, float position) {
item= item.findViewById(R.id.module_apps_id_app_icon);
pivotX.setOn(item);
pivotY.setOn(item);
ImageView ivItem = item.findViewById(R.id.module_apps_id_app_icon);
TextView tvTitle = item.findViewById(R.id.module_apps_id_app_name);
NavigatorApp tag = (NavigatorApp) item.getTag();
pivotX.setOn(ivItem);
pivotY.setOn(ivItem);
float closenessToCenter = 1f - Math.abs(position);
float scale = minScale + maxMinDiff * closenessToCenter;
item.setScaleX(scale);
item.setScaleY(scale);
ivItem.setScaleX(scale);
ivItem.setScaleY(scale);
if (tag != null) {
if (scale == 1) {
ivItem.setImageResource(tag.getmIconId());
tvTitle.setTextColor(ContextCompat.getColor(item.getContext(),R.color.white));
} else {
ivItem.setImageResource(tag.getmUncheckedIconId());
tvTitle.setTextColor(ContextCompat.getColor(item.getContext(),R.color.white_80));
}
}
//int currentPosition = (position - 2) % CARD_SIZE;
}
public static class Builder {