Hack.5 使用TextSwitcher和ImageSwitcher实现平滑过渡

  实现步骤:

    1、通过findViewById()方法获取TextSwitcher对象的引用Swithcer,当然也可直接在代码中构造持续对象;

    2、通过Switcher.setFactory()方法指定TextSwitcher的ViewFactory;

    3、通过Switcher的.setInAnimation()方法设置换人动画效果;

    4、通过Switcher.setOutAnimation 方法设置换出动画效果。

  代码如下:

 private TextSwitcher mTextSwitcher;

 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Animation in = AnimationUtils.loadAnimation(this,
android.R.anim.fade_in);
Animation out = AnimationUtils.loadAnimation(this,
android.R.anim.fade_out);
mTextSwitcher = (TextSwitcher) findViewById(R.id.your_textview);
mTextSwitcher.setFactory(new ViewFactory() {
@Override
public View makeView() {
TextView t = new TextView(YourActivity.this);
t.setGravity(Gravity.CENTER);         return t;
    }
  });
  mTextSwitcher.setInAnimation(in);
21   mTextSwitcher.setOutAnimation(out);
}

Hack.6 为ViewGroup的子视图添加悦目的动画效果

  步骤:

    1、获取ListView的引用;

    2、创建默认动画集合对象,AnimationSet;

    3、创建透明度渐变动画,移位动画,分别为AlphaAnimation,TranslateAnimation;

    4、创建LayoutAnimationController对象并设置子视图,动画效果持续时间;

    5、将LayoutAnimationController对象设置到ListView中;

    关键代码如下:

mListView = (ListView) findViewById(R.id.my_listview_id);

AnimationSet set = new AnimationSet(true);

Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(50);
set.addAnimation(animation); animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
    -1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
animation.setDuration(100);
set.addAnimation(animation); LayoutAnimationController controller =
    new LayoutAnimationController(set, 0.5f); mListView.setLayoutAnimation(controller);

  

Hcak.7 在Canvas上显示动画 

  关于Canvas:  

    可以把 Canvas 视为 Surface 的替身或者接口,图形便是绘制在 Surface 上的。Canvas 封装了所有绘图调用。通过 Canvas,绘制

  到 Surface 上的内容首先存储到与之关联的 Bitmap 中,该 Bitmap最终会呈现到窗口上。

    在onDraw()方法中调用。。。

  关键代码如下:

    Activity代码:

public class MainActivity extends Activity {
private DrawView mDrawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = getWindowManager().getDefaultDispla y();
mDrawView = new DrawView(this);
mDrawView.height = display.getHeight();
mDrawView.width = display.getWidth();
setContentView(mDrawView);
}
}

    DrawView类:

public class DrawView extends View {
private Rectangle mRectangle;
public int width;
public int height;
public DrawView(Context context) {
super(context);
mRectangle = new Rectangle(context, this);
mRectangle.setARGB(255, 255, 0, 0);
mRectangle.setSpeedX(3);
mRectangle.setSpeedY(3);
}
@Override
protected void onDraw(Canvas canvas) {
mRectangle.move();
mRectangle.onDraw(canvas);
invalidate();
}
}

  分析:

    1、创建一个Rectangle实例,代表一个方块;Rectangle类内部实现了将自身绘制到Canvas上的逻辑,

      并且已经包含了正确变换其位置的代码逻辑。

    2、当调用onDraw()方法时,通过move()方法,方块的位置就会改变

    3、通过onDraw()方法绘制到Canvas上;

    4、在invalidate()中,强制重绘视图。

  其实,就是通过循环调用Rectangle的move()和onDraw()方法实现一个动画效果。

Hack.8 附加Ken Burns 特效的幻灯片

  要创建Ken Burns特效,需要预设一些动画

  案例分析:

    将动画随机应用到ImageView,当一个动画显示完毕,即开始显示另一个动画和图片;

    主布局使用FrameLayout,把ImageView置于该布局;

  代码如下:

    略。。。

  旧动画API的特点:  

    1、只支持视图对象的动画效果

    2、仅限于移动、旋转、缩放、渐变等效果

    3、只改变视图移动时的视觉效果,并未改变其真实位置属性

  

Android开发之50个常见实用技巧——添加悦目的动画效果的更多相关文章

  1. Android开发之50个常见实用技巧——活用布局

    第一章.活用布局 Hack1. 使用weight属性实现视图的居中显示  ①合用weightSum属性和layout-weight属性 解决问题,如:居中显示按钮,并占据父视图的50%: 代码如: & ...

  2. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  3. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

     今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...

  4. Android开发之PopupWindow

      /* *  Android开发之PopupWindow * *  Created on: 2011-8-8 *  Author: blueeagle *  Email: liujiaxiang@g ...

  5. android开发之Animations的使用(二)

    android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...

  6. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

  7. Android开发之eclipse 快捷键

    转自:<Android开发之eclipse 快捷键>http://www.cnblogs.com/aimeng/archive/2012/08/07/2626909.html Ctrl+1 ...

  8. Android开发之旅5:应用程序基础及组件

    引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...

  9. android开发之 Wifi的四个类

    android开发之 Wifi的四个类 在Android中对Wifi操作,android本身提供了一些实用的包,在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanR ...

随机推荐

  1. Newtonsoft post Json 日期格式处理

     Newtonsoft.Json.Converters.IsoDateTimeConverter DateTimeConverter = new Newtonsoft.Json.Converters. ...

  2. C语言面向对象的简便方法

    都知道C语言是面向过程的,但是现在软件规模越来越大,通过面向对象的方式可以简化开发.业余时间想了个简单的方法,在C中使用一部分面向对象的基本功能.由于C语言自身的限制,并不完善,只能将就用,聊胜于无, ...

  3. App评分

    //应用实现评论跳转的两种方法: //第一种: //在iOS6.0前跳转到AppStore评分一般是直接跳转到AppStore评分 //NSString *evaluateString = [NSSt ...

  4. Standford CoreNLP--Sentiment Analysis初探

    Stanford CoreNLP功能之一是Sentiment Analysis(情感分析),可以标识出语句的正面或者负面情绪,包括:Positive,Neutral,Negative三个值. 运行有两 ...

  5. 【整理】各种Python的IDE(集成开发环境)的总结和对比

    原地址:http://www.tuicool.com/articles/rMVJNn 原文  http://www.crifan.com/summary_common_python_ide_pyscr ...

  6. Android UI 设计准则

    Design Principles  设计准则 These design principles were developed by and for the Android User Experienc ...

  7. Web Development Terms

    I've come across lots of terms while learning web development. I'm feeling myself overwhelmed. Here ...

  8. OSS研究

    在以前没有毕业之前,做过了一个了播放器,其实就是mplayer的二次开发. 如果在这个播放器之上,加个oss作声音输入,那不就可以做个卡拉OK啦? 1.OSS的定义 OSS(Open Sound Sy ...

  9. 如何用Python从本地将一个文件备份到Google Drive

    1.要有一个Google App账号: 这个可以上网上去申请,申请地址为:https://developers.google.com/appengine/?hl=zh-cn 2.创建一个Google ...

  10. show processlist 输出ID 和 information_schema.PROCESSLIST 的id,information_schema.innodb_trx的TRX_MYSQL_T

    Session 1: mysql> start transaction; Query OK, 0 rows affected (0.00 sec) mysql> update Client ...