- 浏览: 93985 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sincerehui:
android二维码的编码与解码(图片解码与摄像头解码) -
nyh1006:
学习一下!
UIScrollView循环滚动 -
bravewly:
为啥扫不出结果呢?是我扫的方式不对么?
android二维码的编码与解码(图片解码与摄像头解码) -
messigoogle:
我说您这个也是跟eoe上的差不多吧,加载的Assert中的图片 ...
android瀑布流 -
gundumw100:
LazyScrollView是偶写的。欢迎使用。呵呵。http ...
android瀑布流
1 android 动画
1.1动画结构图
Android动画 |
Animation(2D) |
openGL(3D) |
Tween |
Frame |
1.2动画相关类
1.2.1 Animation 类及其子类
Animation 类及其子类实现了各种动画效果,如平移、缩 放、旋转、改变透明度等。
Animation 是基类,他记录了动画的通用属性和方法。主要的属性包括动画持续时间、重复次、interpolator等。TranslateAnimation、RotateAnimation、AlphaAnimation 等是 Animation 的 子类,分别实现了平移、旋转、改变 Alpha 值等动画。
1.2.3 interpolator 类及其子类
interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等;
interpolator 是基类,封装了所有 interpolator 的共同方法.LinearInerpolator、AccelerateInterpolator、DecelerateInterpolator、AccelerateDecelerateInterpolator、CycleInterpolator是 Interpolator 的子类,分别实现了匀速、加速、减速、变速、循环等效果。
1.2.3 Transformation 类
Transformation 记录了仿射矩阵 Matrix,动画每触发一次,会对原来的矩阵做一次运算, View 的 Bitmap 与这个矩阵相乘就可实现相应的操作(旋转、平移、缩放等)。
2 Tween动画
Tween 动画,通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果。
Tween 动画 |
实现方式 |
动画类型 |
XML |
Translate |
Alpha |
Rotate |
Scale |
自定义动画 |
Java Code |
2.1 在XML定义动画
alpha |
渐变透明度动画效果 |
scale |
渐变尺寸伸缩动画效果 |
translate |
画面转换位置移动动画效果 |
rotate |
画面转移旋转动画效果 |
定义的alpha从0.1(透明)到1(不透明)渐变,渐变时间为5000毫秒。
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="5000"
/>
定义了旋转变换,从0度变化到360度(旋转一周),时间为1000毫秒,变换的中心点位控件的中心位置
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1000"
android:repeatCount="10000"
RepeatMode="1"
/>
定义X轴、Y轴从0.1到1逐渐放大(开始高度为正常大小的0.1然后逐渐放大到正常大小)。缩放持续的时间为2000毫秒,缩放的中心点(通过pivotX,pivotY定义)在控件的中间位置。
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.1"
android:toXScale="1.0"
android:fromYScale="0.1"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="2000" />
定义了位置变换
<translate
android:fromXDelta="10"
android:toXDelta="200"
android:fromYDelta="10"
android:toYDelta="200"
android:duration="1000"
/>
2.2在Java Code定义动画
AlphaAnimation |
渐变透明度动画效果 |
ScaleAnimation |
渐变尺寸伸缩动画效果 |
TranslateAnimation |
画面转换位置移动动画效果 |
RotateAnimation |
画面转移旋转动画效果 |
//定义变量
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//第一个参数fromAlpha为 动画开始时候透明度
//第二个参数toAlpha为 动画结束时候透明度
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸
//第二个参数toX为动画结束时 X坐标上的伸缩尺寸
//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
//第四个参数toY为动画结束时Y坐标上的伸缩尺寸
//第五个参数pivotXType为动画在X轴相对于物件位置类型
//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第七个参数pivotXType为动画在Y轴相对于物件位置类型
//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
//第一个参数fromXDelta为动画起始时 X坐标上的移动位置
//第二个参数toXDelta为动画结束时 X坐标上的移动位置
//第三个参数fromYDelta为动画起始时Y坐标上的移动位置
//第四个参数toYDelta为动画结束时Y坐标上的移动位置
myAnimation_Rotate=new RotateAnimation(0.0f,350.0f,Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIV E_TO_SELF, 0.5f);
//第一个参数fromDegrees为动画起始时的旋转角度
//第二个参数toDegrees为动画旋转到的角度
//第三个参数pivotXType为动画在X轴相对于物件位置类型
//第四个参数pivotXValue为动画相对于物件的X坐标的开始位
//第五个参数pivotXType为动画在Y轴相对于物件位置类型
//第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
2.3自定义动画
除了以上4类动画外,在代码中继承android.view.animation.Animation类来实现自定义效果。通过重写Animation的applyTransformation(float interpolatedTime, Transformation t)函数来实现自定义动画效果。
在绘制动画的过程中会反复的调用applyTransformation函数,每次调用参数interpolatedTime值都会变化,该参数从0渐 变为1,当该参数为1时表明动画结束。通过参数Transformation 来获取变换的矩阵(matrix),通过改变矩阵就可以实现各种复杂的效果。
自定义图片旋转效果动画代码。
class ViewAnimation extends Animation
{
int mCenterX;
int mCenterY;
Camera camera = new Camera();
public ViewAnimation()
{
}
@Override
public void initialize(int width, int height, int parentWidth,
int parentHeight)
{
super.initialize(width, height, parentWidth, parentHeight);
mCenterX = width/2;
mCenterY = height/2;
setDuration(2500);
setFillAfter(true);
// setRepeatCount(100);
setInterpolator(new LinearInterpolator());
}
@Override
protected void applyTransformation(float interpolatedTime,
Transformation t)
{
final Matrix matrix = t.getMatrix();
camera.save();
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));
camera.rotateY(360 * interpolatedTime);
camera.getMatrix(matrix);
matrix.preTranslate(-mCenterX, -mCenterY);
matrix.postTranslate(mCenterX, mCenterY);
camera.restore();
}
}
camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次调用的时候interpolatedTime值为0,相当于把ImageView在Z轴后移1300像素, 然后逐步的往前移动到0,同时camera.rotateY(360 * interpolatedTime)函数又把ImageView沿Y轴翻转360度
2.4动画实现
在代码的一个activity中,将需要动画的控件与已定义的动画关联,开启动画
private Animation mAnimationXXX = null;//生明动画
ImageView mAnimImageX = null;//生明 ImageView控件(或者其它需要有动画的控件)
mAnimImageX = (ImageView) this.findViewById(R.id.anim_imageX);//取得图片资源
mAnimImageX.startAnimation(mAnimationXXX);//基于xml文件,开启动画
mAnimImageX.startAnimation(new ViewAnimation());//基于自定义控件,开启动画。
2.5图片旋转Demo
public class AnimationDemo extends Activity {
/** Called when the activity is first created. */
ImageView mAnimImage;
private Animation mAnimationAlpha = null;
private Animation mAnimationScale = null;
private Animation mAnimationTranslate = null;
private Animation mAnimationRotate = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAnimImage = (ImageView) this.findViewById(R.id.anim_image1);
mAnimationAlpha = AnimationUtils.loadAnimation(this,R.anim.alpha_animation);
mAnimationScale = AnimationUtils.loadAnimation(this,R.anim.scale_animation);
mAnimationTranslate = AnimationUtils.loadAnimation(this,R.anim.translate_animation);
mAnimationRotate = AnimationUtils.loadAnimation(this,R.anim.rotate_animation);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_1:
mAnimImage.startAnimation(mAnimationAlpha);
break;
case KeyEvent.KEYCODE_2:
mAnimImage.startAnimation(mAnimationScale);
break;
case KeyEvent.KEYCODE_3:
mAnimImage.startAnimation(mAnimationTranslate);
break;
case KeyEvent.KEYCODE_4:
mAnimImage.startAnimation( mAnimationRotate);
break;
case KeyEvent.KEYCODE_5:
mAnimImage.startAnimation(new ViewAnimation());
break;
}
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( keyCode == KeyEvent.KEYCODE_BACK)
{
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
3 Frame动画
Frame 动画是顺序播放事先做好的图片。可以在XML Resource定义,也可以使AnimationDrawable中的API定义。
3.1Frame动画实现
定义XML文件
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/a1" android:duration="500" />
<item android:drawable="@drawable/a2" android:duration="500" />
<item android:drawable="@drawable/a3" android:duration="500" />
<item android:drawable="@drawable/a4" android:duration="500" />
<item android:drawable="@drawable/a5" android:duration="500" />
<item android:drawable="@drawable/a6" android:duration="500" />
<item android:drawable="@drawable/a7" android:duration="500" />
<item android:drawable="@drawable/a8" android:duration="500" />
<item android:drawable="@drawable/a9" android:duration="500" />
<item android:drawable="@drawable/a10" android:duration="500" />
<item android:drawable="@drawable/a11" android:duration="500" />
<item android:drawable="@drawable/a12" android:duration="500" />
<item android:drawable="@drawable/a13" android:duration="500" />
<item android:drawable="@drawable/a14" android:duration="500" />
<item android:drawable="@drawable/a15" android:duration="500" />
</animation-list>
定义动画类
public class GameView extends View
{
private AnimationDrawable frameAnimation = null;
Context mContext = null;
public GameView(Context context)
{
super(context);
mContext = context;
ImageView img = new ImageView(mContext);
img.setBackgroundResource(R.anim.frameanimation);
frameAnimation = (AnimationDrawable) img.getBackground();
frameAnimation.setOneShot( false );
this.setBackgroundDrawable(frameAnimation);
}
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
switch ( keyCode )
{
case KeyEvent.KEYCODE_DPAD_UP:
frameAnimation.start();
break;
}
return true;
}
}
开启动画
public class Activity01 extends Activity
{
private GameView mGameView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
mGameView = new GameView(this);
setContentView(mGameView);
}
public boolean onKeyUp(int keyCode, KeyEvent event)
{
if ( mGameView == null )
{
return false;
}
mGameView.onKeyUp(keyCode,event);
return true;
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( mGameView == null )
{
return false;
}
if ( keyCode == KeyEvent.KEYCODE_BACK)
{
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
发表评论
-
实现ScrollView的嵌套
2012-12-27 10:39 2108今天忽然需要写两个ScrollView嵌套,如: &l ... -
Android4.0新的SDK新特性 (汉化)
2012-10-31 15:40 1295Android 4.0 是一次重要的平台发布版,为用户和 ... -
Fragments (Android官方文档中文版)
2012-10-30 15:44 860原作者为: 苍山。感谢他分享的内容 概述 ... -
仿iphone实现两个view切换翻转动画
2012-10-26 14:59 2327看那些iPhone的view的切换效果非常帅,今天研究了一下从 ... -
android瀑布流
2012-10-26 10:54 2440今天研究了一下瀑布流,来说一下我实现它的方法。 看一下 ... -
android二维码的编码与解码(图片解码与摄像头解码)
2012-10-24 17:43 3706今天上网找了找可以从图片解析二维码 ,而不是从摄像头,找了半天 ... -
Android 连接WIF获取的信息剖析
2012-10-10 13:48 1088Android的参数大致分成两块:系统服务参数和平台系统 ... -
android使用字体库更改字体
2012-07-27 15:34 1347TextView tv = (TextView) thi ... -
Android代码混淆的实践
2012-07-11 12:46 841开发 apk 的时候当然要考虑保护好自己的代码,Android ... -
给Android的音量按钮添加监听事件
2012-07-09 17:02 1329@Override public boolean onK ... -
去掉listview背景变黑和顶底部边缘模糊
2012-06-29 17:24 1151listview在滚动是背景变黑:android:cacheC ... -
Android 在OnCreate()中获取控件高度与宽度
2012-06-20 17:01 2880试过在OnCreate()中获取控件高度与宽度的童鞋都知道,g ... -
android EditText插入字符串到光标所在位置
2012-03-07 14:01 2153EditText mEditText = (EditText) ... -
android tabactivity view切换edittext不弹出软键盘的解决方案
2011-12-21 12:03 2096public void onFocusChange(View ... -
更改CheckBox的样式
2011-12-13 08:43 2345首先在styles.xml添加如下的自定义样式: <s ... -
Android中RatingBar的自定义效果
2011-11-16 10:14 1483有时候android系统提供给我们的ratingbar效果 ... -
TabHost点击按钮布局改变
2011-11-15 09:48 1009main.xml <?xml version=&quo ... -
android获得控件在屏幕中的绝对坐标
2011-11-10 12:56 2570int[] location = new int[2] ; ... -
手势识别
2011-11-10 09:29 841[功能] 何为手势识别? 比如:你在屏幕上从左至右划出的一个动 ... -
Android px和dip以及sp的区别及转换代码
2011-11-09 16:11 1585/** * 根据手机的分辨率从 dp 的单位 转成为 px ...
相关推荐
通过不同的库方法读取修改xml文件。通过java实现。代码易懂
这是一个java对xml操作的两个类,xml文件的节点都是已知的,都需要提前指定.
SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码 SAX解析超大XML文件 示例代码
java实现xml解析word文档代码实现,通过解析word书签实现java动态写入word文档。方便使用。
本工具可以通过指定的xml文件生成java代码文件。 工具运行需要jre。
讲解String.xml标签在布局文件中及java代码中的引用
java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件java解析XML文件
java读写xml文件 java读写xml文件 java读写xml文件 java读写xml文件 java读写xml文件 java读写xml文件
java实现Xml文件读写,这是一个本人写好的操作XML文件的工程文件,导入到eclipse中可以自己测试的,该文件包含对XML文件的添加、修改和读取操作。
用java操作xml文件示例 xml文件 java操作xml
C# XML文件读取示例
将txt文件转换成xml文件 方便处理,希望对大家有用
用java读取xml文件的四种方法
dom4j解析xml文件代码示例 dom4j解析xml文件代码示例 dom4j解析xml文件代码示例
有属性动画的多种实现方式和动画监听方法,代码有详尽注释
XML的java代码实现,可以实现整体加密,元素加密,内容加密
FLASH+XML 旋转动画效果代码FLASH+XML 旋转动画效果代码FLASH+XML 旋转动画效果代码FLASH+XML 旋转动画效果代码
JAVA中生成xml文件到指定路径和上传到ftp服务器到指定路径的方法。
java用sax实现修改xml文件内容,util工具包中,包含所需jar文件、测试xml文件、startup.bat文件以及使用说明文档
可以通过xml文件直接生成对应的java类文件。 运行需要jre