Skip to content

Commit 40d56d3

Browse files
committed
complex animation bounce effect added & some drawable size optimization
1 parent fafb206 commit 40d56d3

17 files changed

+126
-14
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ dependencies {
3232
implementation 'androidx.constraintlayout:constraintlayout-solver:2.0.0-alpha2'
3333
implementation 'androidx.recyclerview:recyclerview:1.0.0-rc02'
3434
implementation 'de.hdodenhof:circleimageview:2.2.0'
35+
implementation 'androidx.fragment:fragment:1.0.0-rc02'
3536
testImplementation 'junit:junit:4.12'
3637
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
3738
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
android:icon="@mipmap/ic_launcher"
88
android:label="@string/app_name"
99
android:roundIcon="@mipmap/ic_launcher_round"
10+
android:hardwareAccelerated="true"
1011
android:supportsRtl="true"
1112
android:theme="@style/AppTheme">
1213
<activity android:name=".MainActivity">
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package app.layout.motion.motionlayoutexample;
2+
3+
4+
import android.animation.ObjectAnimator;
5+
import android.content.Context;
6+
import android.util.AttributeSet;
7+
import android.view.View;
8+
import android.view.animation.BounceInterpolator;
9+
10+
import androidx.constraintlayout.widget.ConstraintHelper;
11+
import androidx.constraintlayout.widget.ConstraintLayout;
12+
13+
public class BounceHelper extends ConstraintHelper {
14+
protected ConstraintLayout mContainer;
15+
16+
public BounceHelper(Context context) {
17+
super(context);
18+
}
19+
20+
public BounceHelper(Context context, AttributeSet attrs) {
21+
super(context, attrs);
22+
}
23+
24+
public BounceHelper(Context context, AttributeSet attrs, int defStyleAttr) {
25+
super(context, attrs, defStyleAttr);
26+
}
27+
28+
/**
29+
* @param container
30+
* @hide
31+
*/
32+
@Override
33+
public void updatePreLayout(ConstraintLayout container) {
34+
if (mContainer!=container) {
35+
View[] views = getViews(container);
36+
for (int i = 0; i < mCount; i++) {
37+
View view = views[i];
38+
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationX", - 2000, 0).setDuration(1000);
39+
animator.setInterpolator(new BounceInterpolator());
40+
animator.start();
41+
}
42+
}
43+
mContainer = container;
44+
}
45+
}

app/src/main/java/app/layout/motion/motionlayoutexample/ComplexAnimationActivity.kt

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,30 @@ import android.os.Build
44
import android.os.Bundle
55
import android.view.View
66
import androidx.appcompat.app.AppCompatActivity
7+
import androidx.constraintlayout.motion.widget.MotionLayout
8+
import android.animation.ObjectAnimator
9+
import android.content.Context
10+
import android.view.HapticFeedbackConstants
11+
import android.view.animation.BounceInterpolator
12+
import kotlinx.android.synthetic.main.complex_animation_example.*
13+
import android.os.Vibrator
714

8-
class ComplexAnimationActivity: AppCompatActivity() {
15+
16+
17+
18+
class ComplexAnimationActivity: AppCompatActivity(), MotionLayout.TransitionListener {
19+
override fun onTransitionChange(p0: MotionLayout?, p1: Int, p2: Int, p3: Float) {
20+
}
21+
22+
override fun onTransitionCompleted(p0: MotionLayout?, p1: Int) {
23+
if(p0 == null)
24+
return
25+
if(p0.currentState != -1)
26+
doBounceAnimation(mainImage2)
27+
}
928

1029
override fun onCreate(savedInstanceState: Bundle?) {
30+
1131
super.onCreate(savedInstanceState)
1232
setContentView(intent.getIntExtra("layoutId", R.layout.complex_animation_example))
1333
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
@@ -18,5 +38,14 @@ class ComplexAnimationActivity: AppCompatActivity() {
1838
or View.SYSTEM_UI_FLAG_FULLSCREEN
1939
or View.SYSTEM_UI_FLAG_IMMERSIVE)
2040
}
41+
motionLayout.setTransitionListener(this)
42+
43+
}
44+
45+
private fun doBounceAnimation(targetView: View) {
46+
val animator = ObjectAnimator.ofFloat(targetView, "translationY", 0f, -10f, 0f)
47+
animator.interpolator = BounceInterpolator()
48+
animator.duration = 1000
49+
animator.start()
2150
}
2251
}

app/src/main/res/drawable/google_logo.jpg

100644100755
-20.7 KB
Loading

app/src/main/res/drawable/google_plex_cover.png

100644100755
-26 KB
Loading

app/src/main/res/drawable/ic_kotlin.png

100644100755
-177 KB
Loading

app/src/main/res/drawable/ic_kotlin_2.png

100644100755
-284 KB
Loading

app/src/main/res/drawable/ic_lightning_bolt.png

100644100755
-8.34 KB
Loading

0 commit comments

Comments
 (0)