Android动画之Property Animation(二)
来源:互联网 发布:网络语言拔草什么意思 编辑:程序博客网 时间:2024/04/28 23:18
上节讲了属性动画的基本原理,有了这些原理,我们就不难理解API提供的处理类和相关接口了。
Android属性动画的主要类是ValueAnimator, 下面就来实现一个简单的动画,我们将一行字从屏幕的左端按减速规则移动到右端。
public class MainActivity extends Activity { ValueAnimator animator; TextView helloworldText; Button startBtn; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } public void initViews() { helloworldText = (TextView) findViewById(R.id.helloworlTxt); startBtn = (Button) findViewById(R.id.startBtn); startBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //启动动画 startAnimator(); } }); } @SuppressLint("NewApi") @TargetApi(Build.VERSION_CODES.HONEYCOMB) public void startAnimator() { // 获取屏幕宽度 int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 获取view的宽度 int hellowordTextSize = helloworldText.getWidth(); // 设定value变化区间,系统会使用IntEvalator计算AnimatedValue animator = ValueAnimator.ofInt(0, screenWidth - hellowordTextSize); // 持续时间3000ms animator.setDuration(3000); // 使用减速插值算法,DecelerateInterpolator的参数表示值变化的快慢度 animator.setInterpolator(new DecelerateInterpolator(1f)); // 当value更新时触发的监听器,触发间隔与frame delay有关,默认为10ms,当然可以通过 // animator.setFrameDelay(frameDelay) animator.addUpdateListener(new MyUpdateListener()); // 启动value改变过程 animator.start(); } /* * (non-Javadoc) * @see android.app.Activity#onStart() */ @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); } private class MyUpdateListener implements ValueAnimator.AnimatorUpdateListener { @Override public void onAnimationUpdate(ValueAnimator animator) { // TODO Auto-generated method stub // 取得经插值计算后的value值 Integer value = (Integer) animator.getAnimatedValue(); int currentX = value; // 改变当前text view的x坐标 helloworldText.setX(currentX); // 当然也可以通过取fraction的方法,重新计算x的坐标 // float fraction = animator.getAnimatedFraction(); // int currentX = fraction * ( screentWidth - hellowordTextSize - 0 // ) // helloworldText.setX(currentX); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}
0 0
- Android动画之Property Animation(二)
- Android动画之属性动画(Property Animation)(二)
- Android属性动画---Property Animation(二)
- Android属性动画---Property Animation(二)
- 【Android 动画】Property Animation详解(二)
- Android属性动画Property Animation(二)
- Android 属性动画(Property Animation)二
- Android动画 -- Property Animation(二)
- Android动画之Property Animation(一)
- Android动画之Property Animation(三)
- Android动画之Property Animation(四)
- Android动画之Property Animation
- Android 动画学习(二)之Property Animation初步介绍
- Android属性动画Property Animation系列二之ObjectAnimator
- Android 动画学习(二)之Property Animation初步介绍
- Android属性动画Property Animation系列二之ObjectAnimator
- Android属性动画Property Animation系列二之ObjectAnimator
- Android 动画学习(二)之Property Animation初步介绍
- Ueditor用法
- Sqlserver 修改服务器名称
- 类和对象基础概念
- Android 读取图片方向信息
- 作为程序员,不得不知道的App推广知识
- Android动画之Property Animation(二)
- OUTLook 无法搜索,搜索变灰的处理
- bash代码注入的安全漏洞
- jQuery EasyUI — 重写datagrid的combotree编辑类型
- fflush和fsync的联系和区别
- Packet Tracer 5.0实验(一) 交换机的基本配置与管理
- csdn下载频道,我去年买了个包,登山包,超耐磨
- opevcv3.0.0 在Visual Studio 2013下的项目预处理
- 张宇光_P2P能否成为金融巨无霸