Android开发之50个常见实用技巧——添加悦目的动画效果
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个常见实用技巧——添加悦目的动画效果的更多相关文章
- Android开发之50个常见实用技巧——活用布局
第一章.活用布局 Hack1. 使用weight属性实现视图的居中显示 ①合用weightSum属性和layout-weight属性 解决问题,如:居中显示按钮,并占据父视图的50%: 代码如: & ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- Android开发之PopupWindow
/* * Android开发之PopupWindow * * Created on: 2011-8-8 * Author: blueeagle * Email: liujiaxiang@g ...
- android开发之Animations的使用(二)
android开发之Animations的使用(二) 本博文主要讲述的是android开发中的animation动画效果的使用,和上一篇博文不同的是,此次四种动画效果,主要使用的是xml文件实现的,提 ...
- Android开发之TextView高级应用
Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...
- Android开发之eclipse 快捷键
转自:<Android开发之eclipse 快捷键>http://www.cnblogs.com/aimeng/archive/2012/08/07/2626909.html Ctrl+1 ...
- Android开发之旅5:应用程序基础及组件
引言 上篇Android开发之旅:应用程序基础及组件介绍了应用程序的基础知识及Android的四个组件,本篇将介绍如何激活组关闭组件等.本文的主题如下: 1.激活组件:意图(Intents) 1.1. ...
- android开发之 Wifi的四个类
android开发之 Wifi的四个类 在Android中对Wifi操作,android本身提供了一些实用的包,在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanR ...
随机推荐
- (转载)在状态栏即时显示Hint
在状态栏即时显示Hint(所有窗口,包括子窗口控件的hint) 在主窗体中放入一个ApplicationEvents控件.添加如下代码.其中Items[***]中的***代表状态栏的各个子panel, ...
- Python 学习之urllib模块---用于发送网络请求,获取数据(4)
承接将查询城市编码的结果保存到文件中,以字典的形式保存,目的是为了在查询某个城市的天气的时候,能够通过输入的城市名称,找到对应的城市编码.所以此结果字典的数据结构,就是city={城市名称:城市编码} ...
- Python 命令行参数解析
方法1: Python有一个类可以专门处理命令行参数,先看代码: #!/usr/bin/env python # encoding: utf-8 from optparse import Option ...
- PHP利器-WAMPServer
为了配置memcacheAdmin,牵涉到搭建PHP的环境,使用的是WAMPServer,安装之后,需要对apache进行配置, 端口,需要将wamp\bin\apache\Apache2.2.21\ ...
- AFNetworking的原理与基本使用-b
全称是AFNetworking 虽然运行效率没有ASI高,但是使用比ASI简单 是对NSURLConnection和NSURLSession的各自的一层包装 AFN的内部中的RunLoop AFN内部 ...
- CSS禅意
标题取自<css禅意花园>一书,还记得当年读此书时的情景,真的是内容和书名一样的优秀,就以此标题作为自己在该文的一种追求吧,尽管我的水平和见解都和Dave Shea相去甚远.该文算是对前两 ...
- [BZOJ 3530] [Sdoi2014] 数数 【AC自动机+DP】
题目链接:BZOJ - 3530 题目分析 明显是 AC自动机+DP,外加数位统计. WZY 神犇出的良心省选题,然而去年我太弱..比现在还要弱得多.. 其实现在做这道题,我自己也没想出完整解法.. ...
- java虚拟机运行机制
转自java虚拟机运行机制 首先简单阐述下解释型语言和编译型语言的联系与区别. 编译型语言是通过编译器将程序编译成目标机器所能识别的机器码,而解释型语言不需要编译过程.由该语言的解释器读取脚本,按照语 ...
- QLGame 2d Engine源码地址
QLGame 2d Engine源码地址已经提交到github上,地址为:https://github.com/wsgzxl/QLGame2dEngine
- android系统如何自适应屏幕大小
1.屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别 ...