changed the card animation

This commit is contained in:
unknown
2020-02-21 10:22:58 +08:00
parent 43cec56a1f
commit 667e5b08d5
4 changed files with 42 additions and 7 deletions

2
.idea/misc.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
</project>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.mogo.launcher"
android:sharedUserId="android.uid.system">
package="com.mogo.launcher">
<!-- android:sharedUserId="android.uid.system">-->
<uses-permission android:name="android.permission.WAKE_LOCK" />

View File

@@ -65,6 +65,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
private IMogoFragmentManager mMogoFragmentManager;
private OrientedViewPager mCardsContainer;
private VerticalStackTransformer transformer;
private CardModulesAdapter mCardModulesAdapter;
private View mHeader;
@@ -127,7 +128,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
protected void initViews() {
mCardsContainer = findViewById( R.id.module_main_id_cards_container );
mCardsContainer.setOrientation( OrientedViewPager.Orientation.VERTICAL );
transformer = new VerticalStackTransformer( this );
mCardsContainer.setOnPageChangeListener( mOnPageChangeListener = new OnPageChangeListenerAdapter() {
private boolean mIsLast = true;
private boolean mCardFlipStatus = false;
@@ -167,6 +168,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
}
} else if ( state == ViewPager.SCROLL_STATE_IDLE ) {
mCardFlipStatus = false;
transformer.resetOffsetScroll();
}
int cardSize = mCardModulesAdapter.getCount();
@@ -185,6 +187,13 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
}
Log.i( TAG, "onPageScrollStateChanged cost " + ( System.currentTimeMillis() - start ) + "ms" );
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
Logger.d(TAG,"pageScrolled : offset --- " + positionOffset);
transformer.offsetScrollChanged(positionOffset);
}
} );
mMogoFragmentManager = ( IMogoFragmentManager ) ARouter.getInstance().build( MogoServicePaths.PATH_FRAGMENT_MANAGER ).navigation( this );
@@ -320,7 +329,7 @@ public class MainActivity extends MvpActivity< MainView, MainPresenter > impleme
List< IMogoModuleProvider > providers = mMogoModuleHandler.loadCardsModule();
mCardModulesAdapter = new CardModulesAdapter( this, providers );
mCardsContainer.setOffscreenPageLimit( providers.size() );
mCardsContainer.setPageTransformer( true, new VerticalStackTransformer( this ) );
mCardsContainer.setPageTransformer( true, transformer );
mCardsContainer.setAdapter( mCardModulesAdapter );
mCardCoverUpBottomLayout.setVisibility(View.VISIBLE);

View File

@@ -13,6 +13,7 @@ public class VerticalStackTransformer extends VerticalBaseTransformer {
private Context context;
private int spaceBetweenFirAndSecWith;//第一张卡片和第二张卡片宽度差
private int spaceBetweenFirAndSecHeight;//第一张卡片和第二张卡片高度差
private float offsetScroll = 0.0f;//ViewPager滑动时变化幅度
public VerticalStackTransformer( Context context ) {
this.context = context;
@@ -26,14 +27,25 @@ public class VerticalStackTransformer extends VerticalBaseTransformer {
this.spaceBetweenFirAndSecHeight = spaceBetweenFirAndSecHeight;
}
public void offsetScrollChanged(float offset){
if(offset ==0){
return;
}
offsetScroll = offset;
}
public void resetOffsetScroll(){
offsetScroll = 0.0f;
}
@Override
protected void onTransform( View page, float position ) {
if ( position <= 0.0f ) {
if ( position == 0.0f ) {
page.setAlpha( 1.0f );
page.setTranslationY( 0f );
//控制停止滑动切换的时候,只有最上面的一张卡片可以点击
page.setClickable( true );
} else {
} else if(position>0){
float scale = ( float ) ( page.getWidth() - spaceBetweenFirAndSecWith * position ) / ( float ) ( page.getWidth() );
Logger.d("VerticalStackTransformer","scale :" + scale);
//控制下面卡片的可见度
@@ -45,6 +57,20 @@ public class VerticalStackTransformer extends VerticalBaseTransformer {
page.setScaleX( scale );
page.setScaleY( scale );
page.setTranslationY( -page.getHeight() * position + ( page.getHeight() * 0.5f ) * ( 1 - scale ) + spaceBetweenFirAndSecHeight * position );
}else{
float currentPage;
if(offsetScroll > 0.2f){
currentPage = 0.2f;
}else{
currentPage = offsetScroll;
}
page.setAlpha( 1 );
page.setScaleX(1-currentPage);
page.setScaleY(1-currentPage);
page.setPivotX( page.getWidth() / 2f );
page.setPivotY( page.getHeight() / 2f );
page.setTranslationY( 0f );
page.setClickable( false );
}
}
}