Android中欢迎界面背景图片放大效果
16lz
2022-04-06
效果图
实现逻辑
- 背景放一张图片
- 图片上面添加你所需要的信息
- 将图片的长宽拉伸,不过是在一定时间内.均匀的拉伸
用到知识点
- Android属性动画 ObjectAnimator
- AnimatorSet
ObjectAnimator
ObjectAnimator.ofFloat(Object target, String propertyName,String ... values);
通过ObjectAnimator的静态工厂方法,创建一个ObjectAnimator对象
其中共有三个参数
- 需要操纵的View对象
- 要操纵的属性,包含多个,下面会说!
- 可变数组参数,传入多个属性,意思是从第一个渐变到最后一个属性
//这句话的意思就是传入一个ImageView对象,围绕X进行2D缩放,由原始的大小方法到原来的1.13倍!ObjectAnimator animatorX = ObjectAnimator.ofFloat(mSplashImage, "scaleX", 1f, 1.13f);
关于ObjectAnimator.ofFloat();第二个参数
- translationX和translationY: 这两个属性作为一种增量来控制着view对象从它布局容器的左上角坐标开始的位置
- rotation . rotationX 和 rotationY : 这三个属性控制view对象围绕只带你进行2D和3D旋转
- scaleX和scaleY: 这两个属性控制view对象围绕它的支点进行2D缩放
- pirotX 和 PirotY :这两个属性控制View对象的支点位置,围绕支点进行旋转和缩放变换处理.默认支点位置就是中心位置
- X 和Y :这是两个使用的属性,它描述了View在他的容器中最终的位置,它是最初的左上角坐标和translationX,translationY值的累计和/
- alpha VIew 对象的透明度.默认是1(不透明),0(不看见)
其中还用到了AnimatorSet 动画集合.
作用就是将多个动画通过 playTogether(),playSequentially(),animSet.play().with(),defore(),after()这些方法来控制多个动画的协同工作方式,从而做到对动画播放顺序的精确控制
AnimatorSet set = new AnimatorSet(); set.setDuration(ANIMATION_DURATION).play(animatorX).with(animatorY); set.start();
代码实现
public class EntryActivity extends Activity { private static final int ANIMATION_DURATION = 2000; private static final float SCALE_END = 1.13F; private static final int[] SPLASH_ARRAY = { R.drawable.splash0, R.drawable.splash1, R.drawable.splash2, R.drawable.splash3, R.drawable.splash4, R.drawable.splash5, R.drawable.splash6, R.drawable.splash7, R.drawable.splash8, R.drawable.splash9, R.drawable.splash10, R.drawable.splash11, R.drawable.splash12, R.drawable.splash13, R.drawable.splash14, R.drawable.splash15, R.drawable.splash16, }; private ImageView mSplashImage; private TextView titleView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_entry); mSplashImage = ButterKnife.findById(this, R.id.iv_entry); titleView = ButterKnife.findById(this, R.id.tv_title); Random r = new Random(SystemClock.elapsedRealtime()); //设置随机的图片 mSplashImage.setImageResource(SPLASH_ARRAY[r.nextInt(SPLASH_ARRAY.length)]); animateImage(); } private void animateImage() { //表示从1f --> 1.13f 的变化过程 ObjectAnimator animatorX = ObjectAnimator.ofFloat(mSplashImage, "scaleX", 1f, SCALE_END); ObjectAnimator animatorY = ObjectAnimator.ofFloat(mSplashImage, "scaleY", 1f, SCALE_END); //表示多个动画的协同工作 AnimatorSet set = new AnimatorSet(); set.setDuration(ANIMATION_DURATION).play(animatorX).with(animatorY); set.start(); //对动画的监听,动画结束后立马跳转到主页面上 set.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { MainActivity.start(EntryActivity.this); EntryActivity.this.finish(); } }); }}
更多相关文章
- Android动画学习笔记-Android(安卓)Animation
- TextView属性总结
- Android开发学习:ImageView的scaletype属性
- Suggestion: add 'tools:replace="android:label"'
- android开发 drawable中XML
- Android(安卓)中文 API (19) —— TwoLineListItem
- Android的webView应用与js互调app混合开发用例
- 【android】解决设置ImageView的scaletype为centerCrop后padding
- WebKit – WebKit For Android