Android13_fragment_view动画_属性动画

1,fragment:片段,碎片

应用场景:微信,微博的导航栏

1.1从3.0之后的系统引进的控件,代表的是屏幕的一部分,因为以往在手机上的绘制控件问题不大,但是如果是平板界面,每次绘制大量的控件对资源消耗很大,会引起卡顿

fragment允许屏幕先更新界面的一部分,是界面的一部分

点击声音才显示声音的ui界面,点击存储才显示出存储的界面,但是并不是在页面跳转,而是布局文件的切换,点击切换布局文件,通过模块化来使用

FrameLayout布局和fragment最相配,因为它渲染速度最快,效率最高

1.2,fragment入门(模仿上面的平板界面创建一个主界面)

(0)定义主界面布局,个体fragment分配一块显示空间

①创建一个类,继承Fragment(API11之后才可以使用),它是一个轻量级的activity,不需要再清单文件里定义

②创建对应的 fragement布局文件

③重写onCreateView()方法,返回一个View对象

通过inflater(方法上传入的参数).inflate(资源文件,null),返回这个view

(view.inflate底层调用的是inflater.inflate(xxxx) 方法)

④在MainActivity中创建继承类的对象

extendfragment ef =new  extendfragment();

//获取管理器

FragementManager fm = getFragementManager()

//通过管理器获取fragment事务,因为一个界面要么全部更新成功,要么全部一起失败

FragmentTransaction ft = fm.getbeginTransaction();

//替换的方法,一个fragement替换另一个fragement

ft.replace(分配的显示区域控件id,继承的fragment);

//还有add 的方法,把fragement叠加上去

Ft.comit();//提交

额外:①不能直接通过findViewByid()初始化控件,而要通过inflater.inflate()返回的view去find;

这种方式的好处:主界面和子界面的业务功能分离,模块化,方便后期维护,内部耦合性强

②如果有多个fragement可以考虑把中间获取管理器到提交抽取出去,然后传入不同fragement继承类即可(都是继承fragement可以把参数定义为fragement)

③事务只对一次操作有用,comit()一次之后,下一次更新界面必须重新创建事务

1.3 fragment和activity的通信

需求,在fragment继承类里拿到activity主界面中的输入的值或其它值

在fragment中可以getActivity().findViewByid(XXXid);获取对应的控件

//getActivity()获取它挂载的activity

需要上下文可以沟通过getActivity();获取上下文

fragment之间可以通过Activity中转.

1.4 fragment的生命周期(算是一块小的activity)跟activity的生命周期差不多一致

Oncreate(),onDestory(),onStart(),onStop(),onResume(),onPause();

不过它没有setContentVIew(),有的是onCreateView()(重要);

如果是被replace切换掉,相当于是走销毁的三个方法:onstop),onPause(),onDestory()

1.5 fragment的向下兼容(它有两个包app包,4.0以后才有,v4包兼容api为4的版本)

欺骗eclipse编译器:在不修改代码的前提下修改最低版本,编译器就不会检查代码.

Supportx.jar 向下兼容的jar包//低版本的手机想使用高版本的东西就要引入supportx.jar包

但是这样兼容的jar包,使用方式是有所不同的

使用api为4的jar包中的fragment 时候

getFragmentManager()这个方法是没有的.继承activity的时候使用FragementActivity

然后再通过getSupportFragementManager().beginTransaction();获取管理器和事务

之后就跟上面是一样的

这种向下兼容的写法在高版本中是可以使用的,只要导入了对应的supportx.jar包即可

2.View动画

定义一个按钮并放置imageView控件做动画演示

定义几个按钮做具体的动画,透明度alpha,位移trans,缩放scale,旋转动画rotate

2.1透明度变化的动画api  AlphaAnimation aa = new (开始透明度(0.0完全透明),结束透明度(1.0完全不透明))

aa.setDuration(2000);//动画播放的时间长度

aa.setRepeatCount(2);//重复播放n+1次,Animation.INFINITE//循环次数

aa.setRepeatMode(aa.RESTART(正序)/aa.REVERSE(每一播放之后倒序));//重新播放的模式

Iv(对应的控件).startAnimation(aa);//开始播放动画

2.2位移变化的动画api:TranslateAnimation ta = new (1,2,3,4,5,6,7,8);

①开始位置的参照物:本身的控件,手机屏幕都可以做参照物,Ainmation.RELATIVE_TO_PARENT(参考父窗体的X轴)RELATIVE_TO_SELF(相对于自己本身)(可以看做开始的位置)

②为0即可,参考系的比例值

③移动位置的参照物:Animation.RELATIVE_TO_PARENT

④移动的距离 200//代表的不是像素,代表的是父窗体宽度的200倍!(跑的飞起)

⑤-⑧对应的Y轴参数

//其它的等同于设置透明度的动画

2.3,缩放的动画

缩放动画的 API:ScaleAnimation sd = new (1,2,3,4,5,6,7,8);

1,X水平方向缩放的比例

2,X水平方向放大的比例

3-4 Y的缩小和放大

5 X轴缩放的中心点

6 X轴缩放的比例

7-8  Y轴的中心点和比例

其它类似透明度的4个参数设置

2.4 旋转RotateAnimation ra = new (开始角度,结束角度)//默认以本身控件左上方为原点

还有一个构造方法可以设置参照系

其它参数:播放单次时间长度,重复播放的次数,播放的模式,

开始播放

2.5.组合动画播放

上面介绍的动画可以放到一个集合里

动画集合的api :AnimationSet set = new ( boolean 如果为true都使用这个动画集合的插入器,如果为false,就使用它自己的插入器,或者说是模式)

set.addAnimation(动画);//把对应的子动画加进来

3.xml文件定义动画

创建一个动画文件夹,anim,创建对应的xml文件(有默认根节点alpha ,rotate 等)

alpha.xml中 alpha标签

属性: fromAlpha ,toAlpha 开始结束的透明度(不需要带单位float强转)

Duration :播放时间,repeatCount:infinte 一直重复播放,repeatMode:播放模式

translate的xml文件中translate标签中

fromXDelta=参照物坐标系(0)

toXDelta = (0几乎没有移动,100%相对于它自己100%p相对应父窗体)

Scale 标签中pivotX ,pivotY 指定中心点的坐标(都设置50%代表它自身的中心)

Animation aa = AnimationUtils.loadAnimation(this,R.anim. 对应的文件)

iv.startAnimation(aa)

在代码中要使用这个资源文件:通过工具类获取

set动画集合xml文件的设置:不能直接引入,要把其它几个xml文件中的内容复制过来.

动画播放完毕会恢复原来的样式,在这些xml文件的标签属性中有一个fillAfter = true就会保持最后变化的效果,而不是变化会原来的样子

动画的构造方法参数,时长,循环次数,播放模式也是一样的在对应xml文件中设置.

4 View动画的细节问题:

打开开发者选项可以选择显示触摸操作

在使用位移动画的时候,设置的点击事件只有在点击原始位置才有效,点击移动的动画无效.view动画本质上位置是没有改变的,看到的移动只是系统绘制的,通过矩阵变化,而不是ImageView实际的位置.

5,属性动画(3.0,api11之后才引进的)

5.1

属性,字段,成员变量的区别

如果直接声明私有的变量,而不提供公共的访问方式,就仅仅是成员变量

如果提供了公共的访问方式,那么就可以把这个成员变量理解为属性(只要view动画的成员变量有setget方法,就可以用属性动画进行播放)

//对imageView进行动画设置,

iv.setTranslationX()

iv.getTranslationX() //这两个 setget方法可以把平移的成员变量变成属性

ObjectAnimatior oa = ObjectAnimatior.ofFloat(修改的对象(view对象),属性的名称(translationx),可变参数)

Translationx 平移位置:像素点

可变参数float数组,这里可以new一个数组,也可以传入多个float数

oa.setDuration(2000);//动画播放的时间长度

oa.setRepartCount(ObjectAnimator.INFINITE)//这里用ObjectAnimatior

oa.setRepartMode(ObjectAnimator.RESTART(2))

Oa.start()//开始播放动画,移动的过程会按float数组进行移动

//属性动画的移动是可以被点击的,它不仅有动画效果,还把imageView控件进行了移动.

5.2 额外( 只要Imageview控件中的alpha,scale,translation,rotate(Rotation)之类的成员变量有setget方法就可以用属性动画)

setXXType可以设置参照系

注意:是imageView的属性,而不是AlphaAnimation中的属性,并且属性名称开头是小写的

RotateX属性,按X轴进行旋转,RotateY,按Y轴为中心旋转(可以看做3D的效果)

Alpha 透明度变化,ObjectAnimatior.ofFloat(修改的view对象,属性的名称,可变参数(透明度的变化))

动画的集合:如果是属性动画,播放一个set很简单,定义两个单独的属性动画,然后同时调用start()方法就可以一起进行播放了.

希望按对角线进行位移移动,定义两个位移属性动画,一个控制X轴,一个控制Y轴

AnimatiorSet set = new AinmatiorSet()//定义动画的合集

set.playSequentially(Animatior的可变参数)//按顺序播放,playTogether()//一起播放

set.start()//开始播放

5.3 xml定义属性动画

创建一个文件夹animator属性动画文件夹

创建一个animator为根节点的属性动画

在 animator中有propertyName属性 可以指定对应的属性名称,但是在这里就没有可变参数了,例如alpha透明度的属性, 就直接指定valueFrom开始的透明度和valueTo结束的透明度

代码中使用方式:把一个动画资源转换成动画对象

Animator animator = AnimatorInflater.LoadAnimator(this,R.animator.文件id);

animator.setTarget(iv) //指定播放的控件

animator.start(); //开始播放

如果要属性动画的集合,就创建子节点为set的XML文件,把需要一起播放的animator节点放进去即可(按顺序放即可,一个animator节点对应一个动画效果)

使用属性动画,还是推荐用代码实现,因为使用可变参数float数组变化的更灵话一些,资源文件中只能写初始和结束,相比较之下没有那么的精细

6 应用程序的反编译

apk在对应项目的bin目录下.apk文件本质上就是一个zip文件

解压之后清单和布局文件都是一堆乱码,因为在生成apk文件的时候就进行了加密.

工具 安卓反编译助手:需要配置java环境变量,要求jdk7以上(我的电脑有问题用不了,暂时未修复)

时间: 2024-10-13 17:30:10

Android13_fragment_view动画_属性动画的相关文章

Android开发实战之补间动画和属性动画

说起动画,其实一点也不陌生,在使用一款app的时候为了优化用户体验,多多少少的,都会加入动画. 安卓中的动画,分为两大类:补间动画和属性动画.本篇博文会详细介绍总结这两大动画,希望本篇博文对你的学习和生活有所帮助. **补间动画** 补间动画分为四类:平移动画,旋转动画,缩放动画和渐变动画.这几类动画用法都差不多,只是对象参数不同这里我统一展示出来.以下是效果图: 实现代码很简单: btn1.setOnClickListener(new View.OnClickListener() { @Ove

Android动画:模拟开关按钮点击打开动画(属性动画之平移动画)

在Android里面,一些炫酷的动画确实是很吸引人的地方,让然看了就赏心悦目,一个好看的动画可能会提高用户对软件的使用率.另外说到动画,在Android里面支持两种动画:补间动画和属性动画,至于这两种动画的区别这里不再介绍,希望开发者都能在使用的过程中体会两者的不同. 本文使用属性动画完成,说到属性动画,肯定要提到 JakeWharton大神写的NineOldAndroids动画库,如果你的app需要在android3.0以下使用属性动画,那么这个库就很有作用了,如果只需要在高版本使用,那么直接

Android动画学习(缓动动画与属性动画的区别)

前言: 在 Android动画学习(概述)中,如果你看过这篇帖子,你应该会对缓动动画和属性动画之间的区别产生疑问,因为在它们的应用中,你会感觉这两种动画有着一些相似的地方,为此,我打算把这两种动画之间的区别做一下说明 区别: 在这里先附上官方文档对于这两种动画的区别说明(我所说的缓动动画对应在下文中的英文为:View Animation,属性动画对应在下文中的英文为:Property Animation): How Property Animation Differs from View Ani

安卓中的动画之属性动画(1)

属性动画(Property Aniamtion)是在谷歌新推出的一种动画. 1.什么是属性动画? 属性动画,顾名思义,就是操作属性的动画.在这里可能有人要问什么是操作的属性?想想以前我们学习的动画--变换动画,可以更改动画显示的各种形态,看上去非常炫酷:布局动画,可以更改activity跳转你的动画:帧动画,就是flash动画一样.我们在使用这些动画时,特别是变换动画时,有没有想过,假如一个imageview有一个监听事件,而我们使用变换动画更换了imageview的位置时,此时我们想要实现这个

Android动画之属性动画

当我们看到别人的APP里面或者写的Demo里面的一些很牛逼得动画效果的时候,是否会有那么一种冲动我要看看它的源代码到底是怎么写的,为毛我就是写不出这样的动画效果呢,为毛我只能做哪些简单的平移,缩放,旋转,透明度改变的动画效果呢.呵呵,当你这么想的时候,证明你应该存在两种主要的问题:第一,就是你的确基础知识不过关,别人用到的东西,你根本就没有接触过,但是这些东西的确是API里面确实存在的东西.第二,就是你的经验不够,逻辑思维能力还有待提升.任何一个很酷很炫的动画效果,都应该是由一系列的动画效果合成

Android之Fragment,帧动画,补件动画,属性动画

Fragment: 在安卓手机越来越大的情况下,一个屏幕显示只显示一个内容,会显得空旷,布局不够好看,屏幕利用的也不够充分.通常在平板中会出现这种情况,但是由于现在的手机屏幕越来越大,所以在3.0之后引入了Fragment.也可以使用支持类库,来向下兼容低版本.它的生命周期方法和activity一样 使用Fragment可以让我们更加充分地利用手机的屏幕空间,他可以在一个activity中有多个Fragment,多个Fragment可以显示不同的内容. 我们通过简单的demo来了解什么是Frag

android中的动画之属性动画(3)

我在这里将说下关于属性动画中的多个动画同时,在之前我们知道可以在xml代码中的set元素下设置android:ordering属性来控制动画的同时发生.这里我将说的是在JAVA代码中,怎么实现动画同时发生,有两种方法. 1.通过多个ObjectAnimator对象来实现 1 ObjectAnimator.ofFloat(imageview, "translationY", 0F, 100F).setDuration(1000).start(); 2 ObjectAnimator.ofF

Android动画之视图动画和属性动画

Android 动画分为两大类,分别是视图动画(View Animation)和属性动画(Property Animation).对于这两种动画,都能够使用xml和代码的形式定义动画. 注:布局动画相关博客已经发布,有兴趣可跳转Android动画之布局动画 View Animation 视图动画是Android最基础的动画,在API 1中就已经加入,不需考虑兼容性,但由于其动画只是作用于视图上,而不会由该控件的属性,所以有很多的局限性. 视图动画的基类是Animation其下包含了四个直接的子类

Android为ViewPager增加切换动画——使用属性动画

转载请注明出处:http://blog.csdn.net/allen315410/article/details/44200623 ViewPager作为Android最常用的的组件之一,相信大家在项目中会频繁的使用到的,例如利用ViewPager制作引导页.轮播图,甚至做整个app的表现层的框架等等. Android3.0以下不支持切换动画 但是在Android 3.0(API 11)以下的ViewPager是比较死板的,不支持动画特效的,这也就让ViewPager在切换的时候达不到很好的用户