首页 / ANDROID / Android 动画效果
Android 动画效果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android 动画效果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9240字,纯文字阅读大概需要14分钟。
内容图文
动画效果
public class AnimationTestActivity extends Activity { privatefinal String TAG = "xmp"; private Button alphaBtn; private Button transBtn; private Button scaleBtn; private Button rotateBtn; private Button scaleRotateBtn; private Button frameBtn; @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initControls(); } privatevoid initControls() { alphaBtn = (Button) findViewById(R.id.alpha); transBtn = (Button) findViewById(R.id.translate); scaleBtn = (Button) findViewById(R.id.scale); rotateBtn = (Button) findViewById(R.id.rotate); scaleRotateBtn = (Button)findViewById(R.id.scale_rotate); frameBtn = (Button) findViewById(R.id.frame); alphaBtn.setOnClickListener(new BtnOnClickListener()); transBtn.setOnClickListener(new BtnOnClickListener()); scaleBtn.setOnClickListener(new BtnOnClickListener()); rotateBtn.setOnClickListener(new BtnOnClickListener()); scaleRotateBtn.setOnClickListener(new BtnOnClickListener()); frameBtn.setOnClickListener(new BtnOnClickListener()); } class BtnOnClickListener implements OnClickListener { @Override publicvoid onClick(View v) { Log.v(TAG,"--------------->onClick"); switch (v.getId()) { case R.id.alpha: testAlphaEffect(); break; case R.id.translate: testTransEffect(); break; case R.id.scale: testScaleEffect(); break; case R.id.rotate: testRotateEffect(); break; case R.id.scale_rotate: testScaleRotateEffect(); break; case R.id.frame: testFrameEffect(); break; default: break; } } } privatevoid testAlphaEffect() { Intent intent = new Intent("anim.test"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TestEffectActivity.TYPE, TestEffectActivity.EFFECT_ALPHA); startActivity(intent); Log.v(TAG,"--------->testAlphaEffect"); } privatevoid testTransEffect() { Intent intent = new Intent("anim.test"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TestEffectActivity.TYPE, TestEffectActivity.EFFECT_TRANS); startActivity(intent); Log.v(TAG,"--------->testTransEffect"); } privatevoid testScaleEffect() { Intent intent = new Intent("anim.test"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TestEffectActivity.TYPE, TestEffectActivity.EFFECT_SCALE); startActivity(intent); Log.v(TAG,"--------->testTransEffect"); } privatevoid testRotateEffect() { Intent intent = new Intent("anim.test"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TestEffectActivity.TYPE, TestEffectActivity.EFFECT_ROTATE); startActivity(intent); Log.v(TAG,"--------->testTransEffect"); } privatevoid testScaleRotateEffect(){ Intent intent = new Intent("anim.test"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TestEffectActivity.TYPE, TestEffectActivity.EFFECT_SCALE_ROTATE); startActivity(intent); Log.v(TAG,"--------->testTransEffect"); } privatevoid testFrameEffect(){ Intent intent = new Intent("anim.test"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.putExtra(TestEffectActivity.TYPE, TestEffectActivity.EFFECT_FRAME); startActivity(intent); Log.v(TAG,"--------->testFrameEffect"); } }
public class TestEffectActivity extends Activity { privatefinal String TAG = "xmp"; private Context mContext; private View effectView ; private TextView textWidget; publicfinalstatic String TYPE = "type"; publicfinalstaticint EFFECT_ALPHA = 1; publicfinalstaticint EFFECT_TRANS = 2; publicfinalstaticint EFFECT_SCALE = 3; publicfinalstaticint EFFECT_ROTATE = 4; publicfinalstaticint EFFECT_SCALE_ROTATE = 5; publicfinalstaticint EFFECT_FRAME = 6; @Override protectedvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test_effect); mContext = this; } @Override protectedvoid onStart() { super.onStart(); handleEffect(); } privatevoid handleEffect() { Intent intent = getIntent(); int effectType = intent.getIntExtra(TYPE, 0); switch (effectType) { case EFFECT_ALPHA: handleAlphaEffect(); break; case EFFECT_TRANS: handleTransEffect(); break; case EFFECT_SCALE: handleScaleEffect(); break; case EFFECT_ROTATE: handleRotateEffect(); break; case EFFECT_SCALE_ROTATE: handleScaleRotateEffect(); break; case EFFECT_FRAME: handleFrameEffect(); break; default: break; } } privatevoid exit(){ finish(); } /* * 监听是否播放状态 */class EffectAnimationListener implements AnimationListener{ @Override publicvoid onAnimationEnd(Animation animation) { exit(); } @Override publicvoid onAnimationRepeat(Animation animation) {} @Override publicvoid onAnimationStart(Animation animation) {} } privatevoid handleAlphaEffect() { Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.alpha); anim.setAnimationListener(new EffectAnimationListener()); textWidget = (TextView)findViewById(R.id.text_widget); textWidget.setText(" 渐变透明度动画效果"); textWidget.startAnimation(anim); Log.v(TAG,"--------------->handleAlphaEffect"); } privatevoid handleTransEffect() { Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.trans); anim.setAnimationListener(new EffectAnimationListener()); textWidget = (TextView)findViewById(R.id.text_widget); textWidget.setText(" 转换位置移动动画效果"); textWidget.startAnimation(anim); Log.v(TAG,"--------------->handleTransEffect"); } privatevoid handleScaleEffect() { Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.scale); anim.setAnimationListener(new EffectAnimationListener()); textWidget = (TextView)findViewById(R.id.text_widget); textWidget.setText(" 渐变尺寸伸缩动画效果"); textWidget.startAnimation(anim); Log.v(TAG,"--------------->handleTransEffect"); } privatevoid handleRotateEffect() { Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.rotate); anim.setAnimationListener(new EffectAnimationListener()); textWidget = (TextView)findViewById(R.id.text_widget); textWidget.setText(" 画面转移旋转动画效果"); textWidget.startAnimation(anim); Log.v(TAG,"--------------->handleRotateEffect"); } privatevoid handleScaleRotateEffect(){ Animation anim = AnimationUtils.loadAnimation(mContext, R.anim.scale_rotate); anim.setAnimationListener(new EffectAnimationListener()); textWidget = (TextView)findViewById(R.id.text_widget); textWidget.setText(" 画面缩放旋转动画效果"); textWidget.startAnimation(anim); Log.v(TAG,"--------------->handleRotateEffect"); } /* * 监听是否播放状态 */class FrameAnimationListener implements AnimationDrawableListener{ @Override publicvoid onAnimationEnd(AnimationDrawable animation) { exit(); } @Override publicvoid onAnimationStart(AnimationDrawable animation) { } } privatevoid handleFrameEffect() { AnimationDrawable anim = (AnimationDrawable)getResources(). getDrawable(R.drawable.frame); CustomAnimDrawable cusAnim = new CustomAnimDrawable(anim); cusAnim.setAnimationListener(new FrameAnimationListener()); textWidget = (TextView)findViewById(R.id.text_widget); textWidget.setText(" 画面逐帧动画效果"); textWidget.setBackgroundDrawable(anim); cusAnim.start(); Log.v(TAG,"--------------->handleFrameEffect"); } }
public class CustomAnimDrawable extends AnimationDrawable { privatefinal String TAG = "xmp"; private AnimationDrawable mOriAnim; private AnimationDrawable mSelf; private Handler mHandler; privateboolean mStarted; private AnimEndListenerRunnable mEndRunnable; private AnimationDrawableListener mListener; public CustomAnimDrawable(AnimationDrawable anim) { mOriAnim = anim; initialize(); } privatevoid initialize() { mSelf = this; mStarted = false; mHandler = new Handler(); mEndRunnable = new AnimEndListenerRunnable(); for (int i = 0; i < mOriAnim.getNumberOfFrames(); i++) { mSelf.addFrame(mOriAnim.getFrame(i), mOriAnim.getDuration(i)); } } @Override publicvoid start() { mOriAnim.start(); mStarted = true; mHandler.post(mEndRunnable); if (mListener != null) { mListener.onAnimationStart(mSelf); } Log.v(TAG, "------CustomAnimDrawable------>start"); } /** * 循环检测 动画的状态 */class AnimEndListenerRunnable implements Runnable { @Override publicvoid run() { // 动画已开始if (!mStarted) { return; } // 未停止继续监听if (!isEnd()) { //这里的延迟时间是跟你的每一帧动画时间有关,基本保持一致就可以,最后一帧也会完整播放 //上面动画时间为每一帧1000ms,所以这里设为了1000ms mHandler.postDelayed(mEndRunnable,1000); return; } Log.v(TAG, "----------->over"); // 动画已结束if (mListener != null) { mStarted = false; mListener.onAnimationEnd(mSelf); } } } /** * 判断动画是否结束 采用反射机制 * @return*/privateboolean isEnd(){ Class<AnimationDrawable> animClass = AnimationDrawable.class; try{ //利用Java反射方法判断是否结束 //获得私有方法 例如 //Method method = animClass.getDeclaredMethod("nextFrame",boolean.class); //访问其私有变量 Field field = animClass.getDeclaredField("mCurFrame"); field.setAccessible(true); int currFrameNum = field.getInt(mOriAnim); int totalFrameNum = mOriAnim.getNumberOfFrames(); if((currFrameNum == totalFrameNum - 1)|| (currFrameNum == -1)){ returntrue; } } catch (Exception e) { Log.v(TAG,"-------->Exception"); } returnfalse; } publicvoid setAnimationListener(AnimationDrawableListener listener) { mListener = listener; } publicinterface AnimationDrawableListener { /** * Notifies the start of the animation * @param animation */publicvoid onAnimationStart(AnimationDrawable animation); /** * Notifies the end of the animation * @param animation */publicvoid onAnimationEnd(AnimationDrawable animation); } }
Code见 https://github.com/huanyi0723/animationTest/
原文:http://www.cnblogs.com/huanyi0723/p/5122340.html
内容总结
以上是互联网集市为您收集整理的Android 动画效果全部内容,希望文章能够帮你解决Android 动画效果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。