卡片切换效果

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 {

View File

@@ -241,6 +241,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
ivMode.setVisibility( View.VISIBLE );
mExitNavi.setVisibility( View.VISIBLE );
mMApUIController.setPointToCenter( 0.675926, 0.77552 );
mMApUIController.changeMapMode(ivMode.isSelected()?EnumMapUI.NorthUP_2D :EnumMapUI.CarUp_2D );
}
@Override
@@ -251,6 +252,7 @@ public class EntranceFragment extends MvpFragment< EntranceView, EntrancePresent
mExitNavi.setVisibility( View.GONE );
mSpeedLimit.setVisibility( View.GONE );
mMApUIController.setPointToCenter( 0.66145, 0.590688 );
mMApUIController.changeMapMode(EnumMapUI.NorthUP_2D);
}
@Override

View File

@@ -484,6 +484,14 @@ public class SearchFragment extends BaseSearchFragment
MogoModulePaths.PATH_FRAGMENT_SEARCH_CATEGORY);
}
@Override public void onResume() {
super.onResume();
}
@Override public void onPause() {
super.onPause();
}
@Override
public void onDestroyView() {
super.onDestroyView();

View File

@@ -28,7 +28,7 @@ public class FragmentStack {
private Stack< FragmentDescriptor > mFragmentStack = new Stack<>();
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
//private FragmentTransaction mFragmentTransaction;
private int mContainerId;
private Activity mActivity;
private FragmentDescriptor mCurrentFragment;
@@ -69,7 +69,7 @@ public class FragmentStack {
return;
}
mFragmentTransaction = mFragmentManager.beginTransaction();
FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
if ( mCurrentFragment != null ) {
mFragmentTransaction.hide( mCurrentFragment.getFragment() );
@@ -78,8 +78,9 @@ public class FragmentStack {
if ( descriptor.hasTransition() ) {
mFragmentTransaction.setTransition( FragmentTransaction.TRANSIT_FRAGMENT_OPEN );
}
mFragmentTransaction.show(descriptor.getFragment());
//mFragmentTransaction.addToBackStack( null );
mFragmentTransaction.commitAllowingStateLoss();
mFragmentTransaction.commitNowAllowingStateLoss();
if ( descriptor.hasTransition() ) {
mFragmentManager.executePendingTransactions();
}
@@ -100,14 +101,14 @@ public class FragmentStack {
return;
}
mFragmentTransaction = mFragmentManager.beginTransaction();
FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
mCurrentFragment = mFragmentStack.pop();
if ( mCurrentFragment != null ) {
mFragmentTransaction.remove( mCurrentFragment.getFragment() );
}
if ( mFragmentStack.isEmpty() ) {
mFragmentTransaction.commitAllowingStateLoss();
mFragmentTransaction.commitNowAllowingStateLoss();
if ( mCurrentFragment.isNotifyMainModule() ) {
if ( mFragmentStackTransactionListener != null ) {
mFragmentStackTransactionListener.onTransaction( getStackSize() );
@@ -120,7 +121,7 @@ public class FragmentStack {
FragmentDescriptor fragment = mFragmentStack.peek();
if ( fragment != null ) {
mFragmentTransaction.show( fragment.getFragment() );
mFragmentTransaction.commitAllowingStateLoss();
mFragmentTransaction.commitNowAllowingStateLoss();
}
if ( mCurrentFragment.isNotifyMainModule() ) {
@@ -166,11 +167,11 @@ public class FragmentStack {
invokeCallback();
return;
}
mFragmentTransaction = mFragmentManager.beginTransaction();
FragmentTransaction mFragmentTransaction = mFragmentManager.beginTransaction();
for ( FragmentDescriptor descriptor : mFragmentStack ) {
mFragmentTransaction.remove( descriptor.getFragment() );
}
mFragmentTransaction.commitAllowingStateLoss();
mFragmentTransaction.commitNowAllowingStateLoss();
mFragmentStack.clear();
mCurrentFragment = null;
if ( mFragmentStackTransactionListener != null ) {