卡片切换效果
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user