Skip to content

Commit 3b5b724

Browse files
committed
add new anim mode
1 parent 40c1844 commit 3b5b724

File tree

8 files changed

+122
-16
lines changed

8 files changed

+122
-16
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ Step 1. Add the JitPack repository to your build file
3434
Step 2. Add the dependency
3535

3636
dependencies {
37-
compile 'com.github.codeestX:ECardFlow:v1.0.3'
37+
compile 'com.github.codeestX:ECardFlow:v1.0.5'
3838
}
3939

4040
Step 3. Just use it as a ViewPager
@@ -119,7 +119,7 @@ Step 1. Add the JitPack repository to your build file
119119
Step 2. Add the dependency
120120

121121
dependencies {
122-
compile 'com.github.codeestX:ECardFlow:v1.0.4'
122+
compile 'com.github.codeestX:ECardFlow:v1.0.5'
123123
}
124124

125125
Step 3. Just put a ViewPager in ECardFlowLayout
@@ -176,6 +176,8 @@ Java Code:
176176
| DefaultAnimMode | No Effect |
177177
| BlurAnimMode | Blur Effect |
178178
| MoveAnimMode | Parallax Effect |
179+
| ScaleAnimMode | Scale Effect |
180+
| CrossMoveAnimMode | Cross Parallax Effect |
179181
You can custom AnimMode with class which implements `AnimMode`
180182

181183
| ImageProvider | Des |

app/src/main/java/moe/codeest/ecardflowdemo/activity/CardFlowLayoutActivity.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@
99

1010
import moe.codeest.ecardflow.ECardFlowLayout;
1111
import moe.codeest.ecardflow.mode.BlurAnimMode;
12+
import moe.codeest.ecardflow.mode.CrossMoveAnimMode;
1213
import moe.codeest.ecardflow.mode.DefaultAnimMode;
1314
import moe.codeest.ecardflow.mode.MoveAnimMode;
15+
import moe.codeest.ecardflow.mode.ScaleAnimMode;
1416
import moe.codeest.ecardflow.provider.DrawableImageProvider;
1517
import moe.codeest.ecardflow.util.DimenUtils;
1618
import moe.codeest.ecardflowdemo.R;
@@ -24,9 +26,12 @@
2426

2527
public class CardFlowLayoutActivity extends AppCompatActivity {
2628

27-
public static int MODE_DEFAULT = 0;
28-
public static int MODE_BLUR = 1;
29-
public static int MODE_MOVE = 2;
29+
public final static int MODE_DEFAULT = 0;
30+
public final static int MODE_BLUR = 1;
31+
public final static int MODE_MOVE = 2;
32+
public final static int MODE_SCALE = 3;
33+
public final static int MODE_CROSS_MOVE = 4;
34+
public final static String ANIM_MODE = "mode";
3035

3136
private ECardFlowLayout mVPLayout;
3237
private ViewPager mViewPager;
@@ -40,7 +45,7 @@ public class CardFlowLayoutActivity extends AppCompatActivity {
4045
protected void onCreate(Bundle savedInstanceState) {
4146
super.onCreate(savedInstanceState);
4247
setContentView(R.layout.activity_cardflow_layout);
43-
mMode = getIntent().getIntExtra("mode", MODE_DEFAULT);
48+
mMode = getIntent().getIntExtra(ANIM_MODE, MODE_DEFAULT);
4449
init();
4550
}
4651

@@ -58,6 +63,12 @@ private void init() {
5863
case 2:
5964
mVPLayout.setAnimMode(new MoveAnimMode());
6065
break;
66+
case 3:
67+
mVPLayout.setAnimMode(new ScaleAnimMode());
68+
break;
69+
case 4:
70+
mVPLayout.setAnimMode(new CrossMoveAnimMode());
71+
break;
6172
}
6273
mVPLayout.setImageProvider(new DrawableImageProvider(this, res, DimenUtils.getScreenWidth(getApplicationContext()), DimenUtils.getScreenHeight(getApplicationContext())));
6374
for (int i = 0; i < 4; i++) {

app/src/main/java/moe/codeest/ecardflowdemo/activity/MainActivity.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@
88

99
import moe.codeest.ecardflowdemo.R;
1010

11-
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
11+
import static moe.codeest.ecardflowdemo.activity.CardFlowLayoutActivity.ANIM_MODE;
1212

13-
AppCompatButton btnCard, btnLayout, btnLayoutBlur, btnLayoutMove;
13+
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
1414

15+
AppCompatButton btnCard, btnLayout, btnLayoutBlur, btnLayoutMove, btnLayoutScale, btnLayoutCrossMove;
1516

1617
@Override
1718
public void onCreate(Bundle savedInstanceState) {
@@ -22,11 +23,15 @@ public void onCreate(Bundle savedInstanceState) {
2223
btnLayout = (AppCompatButton) findViewById(R.id.btn_layout);
2324
btnLayoutBlur = (AppCompatButton) findViewById(R.id.btn_layout_blur);
2425
btnLayoutMove = (AppCompatButton) findViewById(R.id.btn_layout_move);
26+
btnLayoutScale = (AppCompatButton) findViewById(R.id.btn_layout_scale);
27+
btnLayoutCrossMove = (AppCompatButton) findViewById(R.id.btn_layout_cross);
2528

2629
btnCard.setOnClickListener(this);
2730
btnLayout.setOnClickListener(this);
2831
btnLayoutBlur.setOnClickListener(this);
2932
btnLayoutMove.setOnClickListener(this);
33+
btnLayoutScale.setOnClickListener(this);
34+
btnLayoutCrossMove.setOnClickListener(this);
3035
}
3136

3237
@Override
@@ -36,15 +41,23 @@ public void onClick(View v) {
3641
startActivity(it);
3742
} else if (v == btnLayout) {
3843
Intent it = new Intent(this, CardFlowLayoutActivity.class);
39-
it.putExtra("mode", CardFlowLayoutActivity.MODE_DEFAULT);
44+
it.putExtra(CardFlowLayoutActivity.ANIM_MODE, CardFlowLayoutActivity.MODE_DEFAULT);
4045
startActivity(it);
4146
} else if (v == btnLayoutBlur) {
4247
Intent it = new Intent(this, CardFlowLayoutActivity.class);
43-
it.putExtra("mode", CardFlowLayoutActivity.MODE_BLUR);
48+
it.putExtra(CardFlowLayoutActivity.ANIM_MODE, CardFlowLayoutActivity.MODE_BLUR);
49+
startActivity(it);
50+
} else if (v == btnLayoutMove) {
51+
Intent it = new Intent(this, CardFlowLayoutActivity.class);
52+
it.putExtra(CardFlowLayoutActivity.ANIM_MODE, CardFlowLayoutActivity.MODE_MOVE);
53+
startActivity(it);
54+
} else if (v == btnLayoutScale) {
55+
Intent it = new Intent(this, CardFlowLayoutActivity.class);
56+
it.putExtra(CardFlowLayoutActivity.ANIM_MODE, CardFlowLayoutActivity.MODE_SCALE);
4457
startActivity(it);
4558
} else {
4659
Intent it = new Intent(this, CardFlowLayoutActivity.class);
47-
it.putExtra("mode", CardFlowLayoutActivity.MODE_MOVE);
60+
it.putExtra(CardFlowLayoutActivity.ANIM_MODE, CardFlowLayoutActivity.MODE_CROSS_MOVE);
4861
startActivity(it);
4962
}
5063
}

app/src/main/res/layout/activity_main.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,20 @@
3636
android:textAllCaps="false"
3737
android:layout_marginTop="20dp"
3838
android:text="ECardFlowLayout(Move)"/>
39+
40+
<android.support.v7.widget.AppCompatButton
41+
android:id="@+id/btn_layout_scale"
42+
android:layout_width="wrap_content"
43+
android:layout_height="wrap_content"
44+
android:textAllCaps="false"
45+
android:layout_marginTop="20dp"
46+
android:text="ECardFlowLayout(Scale)"/>
47+
48+
<android.support.v7.widget.AppCompatButton
49+
android:id="@+id/btn_layout_cross"
50+
android:layout_width="wrap_content"
51+
android:layout_height="wrap_content"
52+
android:textAllCaps="false"
53+
android:layout_marginTop="20dp"
54+
android:text="ECardFlowLayout(CrossMove)"/>
3955
</LinearLayout>

ecardflow/src/main/java/moe/codeest/ecardflow/ECardFlowLayout.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ private void initViewPager() {
109109
}
110110
}
111111
if (mViewPager == null) {
112-
throw new RuntimeException("Can't find ViewPager in ECardFlowLayout");
112+
throw new IllegalStateException("Can't find ViewPager in ECardFlowLayout");
113113
}
114114
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
115115
@Override
@@ -225,7 +225,7 @@ public void run() {
225225
}
226226
});
227227
} else {
228-
throw new RuntimeException("setImageProvider is necessary");
228+
throw new IllegalArgumentException("setImageProvider is necessary");
229229
}
230230
}
231231

@@ -373,7 +373,7 @@ public void setImageProvider(ImageProvider provider) {
373373
curBp = loadBitmap(0);
374374
nextBp = loadBitmap(1);
375375
if (mAnimMode == null) {
376-
throw new RuntimeException("You should setAnimMode before setImageProvider");
376+
throw new IllegalStateException("You should setAnimMode before setImageProvider");
377377
}
378378
if (mBlurImage != null) {
379379
curBlurBp = blurBitmap(0);

ecardflow/src/main/java/moe/codeest/ecardflow/mode/BlurAnimMode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public BlurAnimMode() {
1515
this.mRadius = DEFAULT_BLUR_RADIUS;
1616
}
1717

18-
public BlurAnimMode(int mRadius) {
19-
this.mRadius = mRadius;
18+
public BlurAnimMode(int radius) {
19+
this.mRadius = radius;
2020
}
2121

2222
@Override
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package moe.codeest.ecardflow.mode;
2+
3+
import android.widget.ImageView;
4+
5+
/**
6+
* Created by codeest on 2017/2/25.
7+
*/
8+
9+
public class CrossMoveAnimMode implements AnimMode {
10+
11+
private static final float DEFAULT_MOVE_SCALE = 1.3f;
12+
private float mScale;
13+
14+
public CrossMoveAnimMode() {
15+
this.mScale = DEFAULT_MOVE_SCALE;
16+
}
17+
18+
public CrossMoveAnimMode(float mScale) {
19+
this.mScale = mScale;
20+
}
21+
22+
@Override
23+
public void transformPage(ImageView ivBg, float position, int direction) {
24+
ivBg.setScaleX(mScale);
25+
ivBg.setScaleY(mScale);
26+
float totalMoveWidth = ivBg.getWidth() * ((mScale - 1) / 2);
27+
int lastPosition = Math.round(position);
28+
float mFraction;
29+
if (lastPosition % 2 == 0) {
30+
mFraction = -1 * (float) Math.sin(Math.PI * position);
31+
} else {
32+
mFraction = (float) Math.sin(Math.PI * position);
33+
}
34+
ivBg.setTranslationY(totalMoveWidth * mFraction);
35+
}
36+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package moe.codeest.ecardflow.mode;
2+
3+
import android.widget.ImageView;
4+
5+
/**
6+
* Created by codeest on 2017/2/25.
7+
*/
8+
9+
public class ScaleAnimMode implements AnimMode {
10+
11+
private static final int DEFAULT_SCALE_RATE = 1;
12+
private int mScaleRate;
13+
14+
public ScaleAnimMode() {
15+
this.mScaleRate = DEFAULT_SCALE_RATE;
16+
}
17+
18+
public ScaleAnimMode(int scaleRate) {
19+
this.mScaleRate = scaleRate;
20+
}
21+
22+
@Override
23+
public void transformPage(ImageView ivBg, float position, int direction) {
24+
float mFraction = mScaleRate * (float) Math.abs(Math.sin(Math.PI * position));
25+
ivBg.setScaleX(1 + mFraction);
26+
ivBg.setScaleY(1 + mFraction);
27+
}
28+
}

0 commit comments

Comments
 (0)