- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想问一下如何在android Material Design中创建改变形状的动画。这是我从 Android Material Design 指南中获得的视频。
谢谢。
最佳答案
这是您链接到的动画的快速实现。它使用支持库中的 CardView
,加上自定义的 PathInterpolator
使其更像视频中的移动(默认的 AccelerateDecelerateInterpolator
太突然了,但你会在 Lollipop 之前的设备中使用那个)。这不是一件艺术品,但希望这能让您了解创建这些纸动画的一种可能方式。
这是一个演示视频 https://drive.google.com/file/d/0B7TH7VeIpgSQYkx2TVlSakZidXM/view .
final int origSize = getResources().getDimensionPixelSize(R.dimen.original_size);
final int origRadius = getResources().getDimensionPixelSize(R.dimen.original_radius);
final int targetRadius1 = getResources().getDimensionPixelSize(R.dimen.target_radius_1);
final int targetRadius2 = getResources().getDimensionPixelSize(R.dimen.target_radius_2);
final int targetSize1 = origSize * 2;
final int targetSize2 = origSize * 4;
final int ANIMATION_INTERVAL_MS = 600;
final int ANIMATION_DURATION_MS = 700;
private void doMaterialAnimation() {
ValueAnimator va1 = ObjectAnimator.ofFloat(1, 0);
va1.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
transformMaterial(origSize, targetSize1, origRadius, targetRadius1, animation);
}
});
ValueAnimator va2 = ObjectAnimator.ofFloat(1, 0);
va2.setStartDelay(ANIMATION_INTERVAL_MS);
va2.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
transformMaterial(targetSize1, targetSize2, targetRadius1, targetRadius2, animation);
}
});
ValueAnimator va3 = ObjectAnimator.ofFloat(1, 0);
va3.setStartDelay(ANIMATION_INTERVAL_MS);
va3.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
transformMaterial(targetSize2, origSize, targetRadius2, origRadius, animation);
}
});
AnimatorSet aset = new AnimatorSet();
aset.playSequentially(va1, va2, va3);
aset.setDuration(ANIMATION_DURATION_MS);
aset.setInterpolator(new PathInterpolator(0.75f, 0.1f, 0.25f, 0.9f));
aset.start();
}
private void transformMaterial(int origSize,
int targetSize,
int origRadius,
int targetRadius,
ValueAnimator animation) {
float fraction = (float) animation.getAnimatedValue();
cardView.setRadius(interpolate(origRadius, targetRadius, fraction));
cardView.getLayoutParams().width = cardView.getLayoutParams().height
= (int) ((targetSize - origSize) * (1 - fraction) + origSize);
cardView.requestLayout();
}
private float interpolate(int from, int to, float fraction) {
return ((from - to) * fraction) + to;
}
这是卡片,仅供引用。
<android.support.v7.widget.CardView
android:id="@+id/card"
android:background="@color/background_material_light"
app:cardCornerRadius="@dimen/original_radius"
android:layout_centerInParent="true"
android:layout_width="@dimen/original_size"
android:layout_height="@dimen/original_size"
>
关于android - 塑造 Android Material Design,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29886333/
你好 Stackoverflow, 我现在正在编写 API 相当长的一段时间,现在它可以与这些更大的 API 之一一起使用。开始想知道如何塑造这个 API,因为我多次在更大的平台上看到一个大实体(例如
我想问一下如何在android Material Design中创建改变形状的动画。这是我从 Android Material Design 指南中获得的视频。 Material can change
我正在尝试找出适合我想要拟合的模型的正确语法。这是一个时间序列预测问题,我想在将时间序列输入 LSTM 之前使用一些密集层来改进时间序列的表示。 这是我正在使用的虚拟系列: import pandas
我是一名优秀的程序员,十分优秀!