黑马程序员安卓教程:属性动画集合

合集下载

黑马程序员android开发笔记及源码

黑马程序员android开发笔记及源码

01、什么是3G02、android系统简介03、android背景介绍04、android的framewor简介05、两种虚拟机的比较06、sdk的下载以及简介07、创建android模拟器08、ddms简介09、platform-tools的简介及常见adb指令10、android项目的目录结构11、android下apk安装的过程12、常见的adb指令介绍13、创建模拟器遇到的常见错误14、电话拨号器15、点击事件的四种写法16、短信发送器17、相对布局&单位介绍18、现形布局&布局的组合19、表格布局&绝对布局20、帧布局21、测试相关概念22、android下junit测试框架配置23、logcat简介24、保存文件到手机内存25、android下文件访问的权限26、保存文件到SD卡中27、分析setting源代码获取SD卡大小28、_sharePreference入门29、xml文件的序列化30、采用pull解析xml文件31、采用断电调试的方法观察pull解析的的流程32、android下创建一个sqllite数据库33、sql语句实现数据库的增删改查34、系统api实现数据库的增删改查&Sqlite3工具的使用35、数据库的事物36、listView入门37、采用layoutInflater打气筒创建一个view对象38、采用数据适配器ArryAdapter39、常用数据适配器simpleAdapter40、数据适配器总结41、内容提供者简介42、内容提供者的实现43、短信的备份44、插入一条记录到系统短信应用45、内容观察者46、获取系统的联系人信息47、保存联系人到系统通讯录48、读取联系人的一个小细节49、网络图片查看器50、anr产生的原理&如何避免51、android消息机制入门52、网络html查看器53、字符乱码问题的处理54、采用get方式提交数据到服务器55、采用post方式提交数据到服务器56、提交数据到服务器中文乱码问题的处理57、采用httpclient提交数据到服务器58、异步http框架简介&实现原理59、异步http框架提交数据到服务器60、上传文件到服务器61、smartimageview&常见开源代码62、多线程下载的原理63、多线程断点下载的原理64、多线程java代码移植到android65、多线程下载文本页面的更新66、显示意图激活另一个activity67、隐式意图激活另一个activity68、隐式意图的配置69、隐式意图和显示意图的使用场景70、在不同activity之间数据传递71、activity的声明周期72、activity的启动模式73、activity横竖屏切换的声明周期74、开启新的activity获取他的返回值75、请求码和结果码的作用76、利用广播实现ip拨号77、短信窃听器78、自定义广播时间&发送自定义广播&广播接受者优先级79、采用服务执行长期后台操作80、采用服务窃听电话&服务的声明周期81、android进程优先级&为什么使用服务82、绑定方式开启服务&调用服务的方法83、服务的声明周期(混合开启84、采用aidl绑定远程服务85、代码注册广播接受者&利用广播调用服务的办法86、加载大图片到内存87、获取图片exif信息88、从gallery获取图片89、图片画画板90、扒开美女衣服91、图片的缩放92、图片的旋转93、图片的平移&镜面&倒影效果94、图片的合成95、图片的颜色处理96、多媒体播放api简介97、人脸识别98、mediaplayer的生命周期99、soundpoo简介100、sufaceview的生命周期101、播放在线视频102、视频播放器进度的处理103、调用系统照相机拍照和录像104、采用camera拍照105、常见对话框106、notification入门107、菜单108、android下的样式109、android下的主题110、代码编写ui111、html创建ui112、帧动画113、代码创建创建的tween动画114、xml文件定义动画115、传感器简介116、117、杀死进程118、apk的安装119、应用程序的反编译120、动态创建fragment121、用fragment创建一个选项卡122、fragment的向下兼容性123、fragment的生命周期124、fragment之间的通讯125、应用程序国际化04、android的framewor简介Wap:wait and playWireless Makeup Language(WML)精简的html语言Applications:android自带的基本上层应用Aplication framework:应用程序框架Librarics:Linux lernel:05、两种虚拟机的比较编译后文件格式:jvm:.java->.class->.jardalvik vm:.java->.dex->.odex基于的架构:jvm:基于栈的架构dalvik vm:基于寄存器的架构Cpu直接访问寄存器因此dalvik虚拟机的效率比jvm高06、sdk的下载以及简介->获取sdk工具包(sdk:standard develope kits)->ADT(android develop tools,实际上是eclipse的插件)SDK具体内容Android->SDK Plateform:开发时使用到的jar包->Samples for sdk:->ARM EABI V7a System Image:模拟器运行时的镜像->Intel n86 Aton System:模拟器运行时的镜像->MIPS System Image:模拟器运行时的镜像->google APIs:google提供的jar包,可以直接使用google提供的一些API ->source for android SDK:SDK全部的源代码Extrals:->tools:开发的工具->support library:实现高版本的android向下的兼容->google Admed Ads SDK:gongle提供的广告插件->Analyties App Irackiong SDK:应用的用户分析->cloud message:云消息->gongle play service:收费服务->google USB Driver:真实的设备驱动开发时:基于4.0,兼容2.2、2.3.307、创建android模拟器avd:android virture developerVGA:480*640(电视的标准分辨率)QVGA:240*320(四分之一)HVGA:320*480(一半)WVGA:480*800(width)FWVGA:480*854(更宽)08、ddms简介ddms:模拟器不支持中文,因此发送中文会显示不出来09、platform-tools的简介及常见adb指令Android调试桥:内部实现就是socket让两个系统之间实现数据交互->reset adb:模拟器找不到时候可以重启->adb device:列出所有的连接的设备->adb kill-server:杀死adb调试桥->adb start-server 启动adb调试桥dx.bat:将.class文件打包10、android项目的目录结构一:SDK的目录结构->Samples->Api demo:根据API demo(模拟器上面可以看见)的效果可以在sample中看见相应的代码->Source:jar包所有的sdk源代码都在这个文件夹里->SystemImage:系统镜像->temp:下载更新临时存储的文件夹,一般是空的->tools:emulater.ext 不同版本的模拟器二:New Android Application->theme:留给以后作为扩展,现在并没有太大的作用->target SDK:一般选择高版本,因为高版本对下兼容->mark project as a library:一般不选择,意思是将这个项目提供一个jar包供别人使用三:文件夹目录.setting:设置目录assets:资产目录,存放一些文件,这些文件会被原封不动打包到应用程序的apk中bin:gen:自动生成的目录->builderConfig.java:生成的配置信息->R.java:Android 4.1.2->android.jar开发环境,jar包可以在properties中修改,jar包就是SDK011、Android下apk的安装过程一、Android安装过程分析:->setContentView:甚至view的对象,把里面的xml文件加载到->在project中选择build automaticly会自动把文件生成字节码文件,.class $代表的class文件生成的是内部类->dex.bat文件会把.class文件生成.dex文件->apk压缩文件解压内部内容->META-INF:应用程序的签名eclipse的调试签名文件->res:资源文件->classes.dex:class文件->resources.arsc:资源ID映射->android软件安装的过程:->拷贝xxx.apk带/data/app/xxx-1.apk->在/data/data目录下创建一个文件夹,文件夹名称当前应用程序的报名012、常见adb指令前提:->设备连接上电脑而且驱动安装正常,如果安装不正常的话,会有黄色的问号显示;->设备上打开USB调试;指令:->adb device(如果启动发现这个程序没有安装会自动安装)->adb kill-server->adb start-server->adb uninstall <包名>->adb -s emulator-5554 install c:\\users\\administrator\\hello.apk如果有多个设备的话,如果不指定安装的是哪个设备程序会报错->adb push haha.prop /sdcard/haha.txt 将文件移到(360管家,豌豆荚之类的软件他们也是用的adb指令,倘若电脑上装这些软件的话,会因为两个adb指令抢端口号而挂掉)(adb版本之间兼容不是很好,经常报错可以考虑下版本的问题)->adb shell:远程连接到了android的linux终端ls:显示文件夹ps:显示正在运行的程序ping:网络连通性013、创建模拟器遇到的常见错误->路径最好不要有中文:->应用安装不上,或者安装模拟器的时候开启一个新的模拟器:可能是模拟器的资源被占用,模拟器在运行的时候其实占用着硬盘上面的一个文件,这个文件位于工作空间.android/avd/iphone.avd 里面会有镜像文件,当一个模拟器开启起来了,就给你创建一个文件夹.knock的文件夹,代表着这个模拟器被锁定了,如果把模拟器关掉,就没有程序占据这几个镜像资源了,那么这几个程序就会被自动删除。

第6章 集合类(黑马程序员版)

第6章 集合类(黑马程序员版)
案例代码
接下来通过一个案例来学习这些方法的使用,请查看教材文件6-2。
✎ 6.3 List接口
Iterator接口
在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提 供了一个接口Iterator。Iterator接口也是Java集合中的一员,但它与Collection、 Map接口有所不同,Collection接口与Map接口主要用于存储元素,而Iterator主 要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代 器。
பைடு நூலகம்
✎ 6.3 List接口
图中,通过两张图描述了LinkedList集合新增元素和删除元素的过程。其中,左 图为新增一个元素,图中的元素1和元素2在集合中彼此为前后关系,在它们之 间新增一个元素时,只需要让元素1记住它后面的元素是新元素,让元素2记住 它前面的元素为新元素就可以了。右图为删除元素,要想删除元素1与元素2之 间的元素3,只需要让元素1与元素2变成前后关系就可以了。由此可见 LinkedList集合具有增删元素效率高的特点。
图中,在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指 向任何元素,当第一次调用迭代器的next()方法后,迭代器的索引会向后移动一位, 指向第一个元素并将该元素返回,当再次调用next()方法时,迭代器的索引会指向 第二个元素并将该元素返回,依此类推,直到hasNext()方法返回false,表示到达了 集合的末尾,终止对元素的遍历。
☞点击查看本小节知识架构
模拟KTV点歌系统
Set接口
☞点击查看本小节知识架构
模拟新浪微博用户注册
Map接口
☞点击查看本小节知识架构

【黑马程序员】Android矢量图(三)--矢量图动画

【黑马程序员】Android矢量图(三)--矢量图动画

【黑马程序员】Android矢量图(三)--矢量图动画矢量图动画前面我们介绍了Android中的矢量图的显示,和矢量图中的语法。

接下来我们来一块学习一下Android中的矢量图动画。

接下来我们学习一下用矢量图动画实现一下这个效果。

从一个×号动态的变成一个√号。

首先在资源文件中创建一个animator的文件夹。

用xml定义一个从×到√的属性动画01 02 03 04 05 06 07 08 09 10 11 <?xml version ="1.0" encoding ="utf-8"?><set xmlns :android ="/apk/res/android"android :ordering ="sequentially"><objectAnimatorandroid :duration ="@android:integer/config_longAnimTime"android :propertyName ="pathData"android :valueFrom ="M24,0 l 0,48 M0,24 l 48,0"android :valueTo ="M9,36 l 20,0 M27,36 l 0,-36"android :valueType ="pathType" /></set >和一个旋转属性动画1 2 3 4 5 6 7 8 9 <?xml version ="1.0" encoding ="utf-8"?><set xmlns :android ="/apk/res/android"android :ordering ="sequentially"><objectAnimatorandroid :duration ="@android:integer/config_longAnimTime"android :propertyName ="rotation"android :valueFrom ="45"android :valueTo ="405"/></set >然后,创建矢量图的drawable 资源。

黑马程序员安卓教程:Scale 伸缩动画

黑马程序员安卓教程:Scale 伸缩动画

Scale 伸缩动画实现方式跟Alpha渐变动画类似,这里就直接给出核心代码。

【文件1-11】Scale动画代码片段1.public void scaleAnimation(View view){2./*3.* 第一个参数 fromX x 轴起始大小(这个大小指倍数,它内部会用这个倍数去乘实际像素)4.* 第二参数 toX 轴截止大小(若起始大小=截止大小就是指x轴不伸缩)5.* 第三个参数fromY Y 轴的起始大小6.* 第四个参数toY轴的截止大小7.* 第五个参数pivotXType X 轴的原点的类型(相对于自己而言还是相对于父容器而言)8.* 第六个参数pivotXValue开始伸缩时的X轴的原点9.*(例:0.5就是指以图片宽度的二分之一的位置作为X轴的原点)10.* 第七个参数pivotYType Y 轴的原点的类型11.* 第八个参数pivotYValue开始伸缩时的Y轴的原点12.*/13.Animation sa = new ScaleAnimation(1,1.5f, 1,2, Animation.RELATIVE_TO_SELF,14.0.5f,Animation.RELATIVE_TO_SELF,0.5f);15.sa.setDuration(2000);16.sa.setRepeatCount(5);17.sa.setRepeatMode(Animation.REVERSE);18.sa.setFillBefore(true);19.iv.setImageResource(R.drawable.me);1420.iv.setAnimation(sa);21.sa.start();22.}23.。

黑马程序员:Android 中的动画—帧动画

黑马程序员:Android 中的动画—帧动画

黑马程序员:Android 中的动画—帧动画Android 3.0以前,Android只支持两种动画模式,tween animation 和 frame animation,在Android 3.0 中又引入了一个新的动画系统:property animation。

Frame Animation(帧动画):创建一个Drawable 序列,这些 Drawable 可以按照指定的时间间隔,一个一个的显示,也就是顺序播放事先做好的图像。

Tween Animation(渐变动画也叫补间动画):通过对特定的对象做图像变换如平移、缩放、旋转、淡出/淡入等产生动画效果。

帧动画创建一个 Drawable 序列,这些 Drawable 可以按照指定的时间间隔一个一个的显示,也就是顺序播放事先准备好的图像,跟放胶片电影类似。

下面通过一个案例来演示帧动画的使用。

步骤:1.将准备好的图片资源放到 Android 工程的 res/drawable-hdpi 目录中。

2.在项目的 res 目录下创建文件夹 drawable,然后在文件夹下面定义动画 XML 文件,文件名称可以自定义(也可以使用 AnimationDrawable类,采用代码方式定义动画效果),这里给改xml 文件起名为frame_anim.xml,见文件 1-7。

【文件 1-7】frame_anim.xml1<?xml version="1.0"encoding="utf-8"?>2<animation-listxmlns:android="/apk/res/android"3android:oneshot="true">4<item android:drawable="@drawable/a1"android:duration="200"></item>5<item android:drawable="@drawable/a2"android:duration="200"></item> 6<!-----------------更多 item 不再展示--------------------->7</animation-list>3.打开创建好的 xml 文件,在里面添加根节点<animation-list>,可以在此根节点中设置属性” android:oneshot”来控制动画只播放一次,否则系统将默认持续播放。

黑马程序员安卓教程:Android之补间动画组合

黑马程序员安卓教程:Android之补间动画组合
ta.setDuration(2000);
ta.setRepeatCount(2);
iv.startAnimation(ta);
定义一个旋转的动画,代码如例1-3所示:
例1-3
RotateAnimation ra =newRotateAnimation(0, 360, Animation.RAnimation.RELATIVE_TO_SELF, 0.5f);
Android之补间动画集合
在“Android之补间动画”文档中,我们实现了单个动画的效果。下面我是将这些单个动画组合在一起,实现复杂的动画效果。具体操作如下:
在“10_补间动画”项目中,添加一个功能按钮,代码效果如例1-1所示:
图1-1所示
添加按钮的点击事件,代码如下:
定义一个平移的动画,代码如例1-2所示:
set.addAnimation(ra);//添加旋转动画
iv.startAnimation(set);//启动动画
运行程序,实现一边旋转一边平移的效果,如图1-2所示:
图1-2所示
ra.setDuration(2000);
ra.setRepeatCount(2);
iv.startAnimation(ra);
创建一个动画插入器,代码如例1-4所示:
例1-4
AnimationSet set =newAnimationSet(false);
set.addAnimation(ta);//添加平移动画
例1-2
TranslateAnimation ta =newTranslateAnimation(Animation.RELATIVE_TO_PARENT, -0.5f,Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, -0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);

Android属性动画框架ObjectAnimator、ValueAnimator,这一篇就够了

Android属性动画框架ObjectAnimator、ValueAnimator,这一篇就够了

Android属性动画框架ObjectAnimator、ValueAnimator,这⼀篇就够了前⾔我们都知道 Android ⾃带了 Roate Scale Translate Alpha 多种框架动画,我们可以通过她们实现丰富的动画效果,但是这些宽家动画却有⼀个致命的弱点,它们只是改变了 View 显⽰的⼤⼩,⽽没有改变 View 的响应区域。

这时以 ObjectAnimator、ValueAnimator 为代表的属性动画也就应运⽽⽣了。

简单效果⼯作原理属性动画字如其名,是通过改变 View 的属性值来改变控件的形态,说⽩了就是通过反射技术来获取控件的⼀些属性如宽度、⾼度等的 get 和 set ⽅法,从⽽实现所谓的动画效果。

所以,这就需要我们的 View (如⾃定义 View 中)具有 set 和 get ⽅法,如果没有则会导致程序的Clash 。

具体步骤1. ⾸先,系统通过 get ⽅法获得属性值2. 系统在时间插值器的作⽤下,更变属性值3. 系统调⽤ set ⽅法,将属性值重新赋予控件由此也可以看出:属性动画直接改变了控件的属性,所以动画结束后控件也就发⽣了永久性的变化。

使⽤ ObjectAnimator 实现四种动画这⾥我打算通过使⽤ ObjectAnimator 实现四⼤动画框架:1. alpha2. scaleX/scaleY3. translateX/translateY4. rotation给⼤家讲解下 ObjectAnimator 使⽤private void iniAnimation(){// 透明度动画ObjectAnimator.ofFloat(mAlphaImage, "alpha", 1, 0, 1).setDuration(4000).start();// 缩放final AnimatorSet animatorSet = new AnimatorSet();mScaleImage.setPivotX(mScaleImage.getWidth()+250);mScaleImage.setPivotY(mScaleImage.getHeight()+250);animatorSet.playTogether(ObjectAnimator.ofFloat(mScaleImage, "scaleX", 1, 0).setDuration(2000),ObjectAnimator.ofFloat(mScaleImage, "scaleY", 1, 0).setDuration(2000));animatorSet.start();// 平移 translationfinal AnimatorSet translationAnimatorSet = new AnimatorSet();translationAnimatorSet.playTogether(ObjectAnimator.ofFloat(mTranslationImage, "translationX", 20, 100).setDuration(2000),ObjectAnimator.ofFloat(mTranslationImage, "translationY", 20,100).setDuration(2000));translationAnimatorSet.start();// 利⽤ ObjectAnimator 实现旋转动画final AnimatorSet rotateAnimationSet = new AnimatorSet();rotateAnimationSet.playTogether(ObjectAnimator.ofFloat(mRotationImage, "rotation",0, 360).setDuration(2000));rotateAnimationSet.start();}以上代码就通过了 ObjectAnimator 实现了,四⼤效果,实现过程基本可以归纳为1. 创建 AnimatorSet 对象2. 设置,变化发⽣的轴⼼(部分需要)3. 设置所需要发⽣改变的动画(通常在 playTogether() ⽅法中)4. 开启动画最后的运⾏效果如开头动画所⽰同样的,我们可以在⼀个 playTogether ⽅法中添加多个动画,这样就能实现多动画组合的效果。

Android中属性动画的基本用法之ValueAnimator

Android中属性动画的基本用法之ValueAnimator
• 最后,补间动画还有一个致命的缺陷,就是它只是改变了View的显示效果而已,而不会真正去改变View的属 性。比如说,现在屏幕的左上角有一个按钮,然后我们通过补间动画将它移动到了屏幕的右下角,现在你可以 去尝试点击一下这个按钮,点击事件是绝对不会触发的,因为实际上这个按钮还是停留在屏幕的左上角,只不 过补间动画将这个按钮绘制到了屏幕的右下角而已。
Android中属性动画的基本用法|ValueAnimator
6
ValueAnimator
• 比如说想要将一个值从0平滑过渡到1,时长300毫秒,就可以这样写:
• 调用ValueAnimator的ofFloat()方法就可以构建出一个ValueAnimator的实例,ofFloat()方法当中允许传入 多个float类型的参数,这里传入0和1就表示将值从0平滑过渡到1,然后调用ValueAnimator的setDuration() 方法来设置动画运行的时长,最后调用start()方法启动动画。
Android中属性动画的基本用法|为什么要引入属性动画
3
为什么要引入属性动画
• 补间动画还有一个缺陷,就是它只能够实现移动、缩放、旋转和淡入淡出这四种动画操作,那如果我们希望可 以对View的背景色进行动态地改变呢?很遗憾,我们只能靠自己去实现了。也就是说,之前的补间动画机制 就是使用硬编码的方式来完成的,功能限定死就是这些,基本上没有任何扩展性可言。
Android中属性动画的基本用法|ValueAnimator
7
ValueAnimator
• 怎样才能知道这个动画是不是已经真正运行了呢?这就需要借助 监听器来实现了,如下所示:
Android中属性动画的基本用法|ValueAnimator
8

黑马——android核心基础

黑马——android核心基础

江西省南昌市2015-2016学年度第一学期期末试卷(江西师大附中使用)高三理科数学分析一、整体解读试卷紧扣教材和考试说明,从考生熟悉的基础知识入手,多角度、多层次地考查了学生的数学理性思维能力及对数学本质的理解能力,立足基础,先易后难,难易适中,强调应用,不偏不怪,达到了“考基础、考能力、考素质”的目标。

试卷所涉及的知识内容都在考试大纲的范围内,几乎覆盖了高中所学知识的全部重要内容,体现了“重点知识重点考查”的原则。

1.回归教材,注重基础试卷遵循了考查基础知识为主体的原则,尤其是考试说明中的大部分知识点均有涉及,其中应用题与抗战胜利70周年为背景,把爱国主义教育渗透到试题当中,使学生感受到了数学的育才价值,所有这些题目的设计都回归教材和中学教学实际,操作性强。

2.适当设置题目难度与区分度选择题第12题和填空题第16题以及解答题的第21题,都是综合性问题,难度较大,学生不仅要有较强的分析问题和解决问题的能力,以及扎实深厚的数学基本功,而且还要掌握必须的数学思想与方法,否则在有限的时间内,很难完成。

3.布局合理,考查全面,着重数学方法和数学思想的考察在选择题,填空题,解答题和三选一问题中,试卷均对高中数学中的重点内容进行了反复考查。

包括函数,三角函数,数列、立体几何、概率统计、解析几何、导数等几大版块问题。

这些问题都是以知识为载体,立意于能力,让数学思想方法和数学思维方式贯穿于整个试题的解答过程之中。

二、亮点试题分析1.【试卷原题】11.已知,,A B C 是单位圆上互不相同的三点,且满足AB AC →→=,则AB AC →→⋅的最小值为( )A .14-B .12-C .34-D .1-【考查方向】本题主要考查了平面向量的线性运算及向量的数量积等知识,是向量与三角的典型综合题。

解法较多,属于较难题,得分率较低。

【易错点】1.不能正确用OA ,OB ,OC 表示其它向量。

2.找不出OB 与OA 的夹角和OB 与OC 的夹角的倍数关系。

黑马程序员安卓教程:属性动画

黑马程序员安卓教程:属性动画

黑马程序员安卓教程:属性动画通过控制控件的属性可以实现动画效果,属性动画比补间动画要更灵活、强大的多。

需要注意的是属性动画内部其实并没有区分位移、缩放、透明、旋转等动画,其核心思想只是修改一个控件的属性,我们可以通过修改不同的属性来实现补间动画的4种效果而已。

为了演示属性动画,我新创建一个Android工程。

布局如下:【文件1-17】activity_main.xml1.<RelativeLayout xmlns:android="/apk/res/android"2.android:layout_width="match_parent"3.android:layout_height="match_parent" >4.5.<LinearLayout6.android:layout_width="match_parent"7.android:layout_height="wrap_content"8.android:orientation="horizontal">9.10.<Button11.android:layout_width="0dp"12.android:layout_height="wrap_content"13.android:layout_weight="1"14.android:onClick="translate"15.android:text="位移" />16.17.<Button18.android:layout_width="0dp"19.android:layout_height="wrap_content"20.android:layout_weight="1"21.android:onClick="scale"22.android:text="缩放" />23.24.<Button25.android:layout_width="0dp"26.android:layout_height="wrap_content"27.android:layout_weight="1"28.android:onClick="alpha"29.android:text="透明" />30.31.<Button32.android:layout_width="0dp"33.android:layout_height="wrap_content"34.android:layout_weight="1"35.android:onClick="rotate"36.android:text="旋转" />37.</LinearLayout>38.39.<ImageView40.android:id="@+id/iv"41.android:layout_width="wrap_content"42.android:layout_height="wrap_content"43.android:layout_centerInParent="true"44.android:src="@drawable/ic_launcher" />45.46.</RelativeLayout>运行效果如图图1-7 属性动画界面。

黑马程序员安卓教程:AnimationSet 动画集合

黑马程序员安卓教程:AnimationSet 动画集合

黑马程序员安卓教程:AnimationSet 动画集合Android 提供了 AnimationSet 动画集合用于将多种补间动画联合起来一起使用,这样就能实现更多复杂的动画效果。

动画集合既可以使用 AnimationSet 类来定义也可以在 XML 文件中使用<set>节点来定义。

1)使用 XML 文件实现动画集合在res/anim 目录下创建 xml 文件,anim_set.xml。

文件清单如下:【文件 1-14】anim_set.xml1.<?xml version="1.0"encoding="utf-8"?>2.<set xmlns:android="/apk/res/android"3.android:shareInterpolator="false"4.>5.<alpha6.android:duration="2000"7.android:fillAfter="true"8.android:fromAlpha="1"9.android:repeatCount="2"10.android:repeatMode="reverse"11.android:toAlpha="0" >12.</alpha>13.14.<scale15.android:duration="2000"16.android:fillAfter="true"17.android:fromXScale="0"18.android:fromYScale="0"19.android:repeatCount="2"20.android:repeatMode="reverse"21.android:toXScale="3"22.android:toYScale="3" >23.</scale>24.25.<translate26.android:duration="2000"27.android:fillAfter="true"28.android:fromXDelta="0"29.android:fromYDelta="0%"30.android:repeatCount="2"31.android:repeatMode="reverse"32.android:toXDelta="500%"33.android:toYDelta="300%" >34.</translate>35.36.<rotate37.android:duration="2000"38.android:fillAfter="true"39.android:fromDegrees="0"40.android:pivotX="50%"41.android:pivotY="50%"42.android:repeatCount="2"43.android:repeatMode="reverse"44.android:toDegrees="360" >45.</rotate>46.47. </set>48.在 Activity 中添加如下方法,实现业务功能:【文件 1-15】动画集合核心代码1.public void animationSet(View view) {2.//加载动画集合文件3.Animation animation =AnimationUtils.loadAnimation(this, R.anim.anim_set);4.iv.setAnimation(animation);5.animation.start();6.}通过上面的代码我们发现,代码逻辑跟实现普通的代码其实是一模一样的,无非就是使用到的动画资源文件不一样罢了。

黑马程序员安卓教程:基本的补间动画

黑马程序员安卓教程:基本的补间动画

黑马程序员安卓教程:基本的补间动画补间动画是由Adoble公司提出来的,其动画实现的原理是:通过数学算法将一个图片有初始状态转化为另一个终止状态,在这两个始末状态之间产生动画效果。

下面我们将通过具体的DEMO来编写补间动画,具体步骤如下:1.新建工程【File】→【new】→【Android Application Project】命名为:10_补间动画2.编写布局根据需求设计布局文件,效果如图1-1所示:图1-1所示图1-1对应的xml布局代码如例1-1所示:例1-1例1-1定义4个按钮和一个ImageView,点击不同的按钮则ImageView执行对应的动画效果。

3.编写动画点击“alpha”按钮,则实现透明度的变化,代码如例1-2所示:例1-2例1-2中直接new 一个AlphaAnimation 来创建一个透明度变化的动画,在new 的过程中传入了两个参数,分别表示开始透明度和结束透明度。

本例将实现:由完全透明逐渐变为完全不透明。

运行程序,效果如图1-2所示:you由不透明逐渐变为完全透明图1-2所示点击“scale ”按钮,则实现缩放的变化,代码如例1-3所示:比例,Y轴方向的开始比例,Y轴方法的终止比例,X轴缩放中心点的类型即以自身为参考,X轴缩放中心点的位置,Y轴缩放中心点的类型也以自身为参考,Y轴缩放中心点的位置。

运行程序,效果如图1-3所示:以图片自身中心点,图1-3所示点击“trans”按钮,则实现位移的变化,代码如例1-4所示:例1-4运行程序,效果如图1-4所示:图1-4所示点击“rotate”按钮,则实现旋转的变化,代码如例1-5所示:运行程序,效果如图1-5所示:图1-5所示图1-5实现的是:图片以自身为中心360度旋转。

android属性动画

android属性动画

android属性动画android属性动画一、概述Android动画总共分为三种逐帧动画、补间动画、属性动画。

逐帧动画:主要就是将几张图片放在一起播放形成动画。

补间动画:补间动画还是比较局限的,能实现view的旋转、横竖拉伸、横竖平移、透明度等简单的变化。

由于android速度发展之快,原有的两种动画已经不能满足我们的需求,所以android在3.0版本推出了一个高大上的动画效果,属性动画。

二、相关API:ValueAnimator:属性动画的执行类,主要负责计算各个帧所对应的属性的值,可以处理动画的更新事件,它可以定义属性动画绝大部分的核心功能;ObjectAnimator:他是ValueAnimator的子类,之一指定动画改变的属性,不过某些场景下,objectAnimator有局限性,那就需要通过ValueAnimator来解决。

AnimatorSet:用于控制多个动画的执行顺序,下文会讲到有哪些方法可以用到。

AnimatorInflater:用于加载属性动画的xml文件。

TimeInterpolator:时间插值器,用于控制动画播放的速度,是一个接口可以实现它去控制动画播放的速度。

此类有许多系统默认的子类,可以实现动画的匀速,加速等一些类别的播放。

PropertyValuesHolder:简单的属性执行类,相对于objectAnimator和valueAnimator使用起来更方便,也更好理解。

TypeEvaluator:此API在我看来是实现炫酷属性动画的核心部分,此API主要负责在动画执行到某个值的时候需要展示什么样的效果。

本篇博客将介绍:objectAnimator和valueAnimator的简单用法,如何监听动画的各个过程,AnimatorSet实现动画的衔接和同时播放,AnimatorInflater加载xml动画文件,PropertyValuesHolder 加载多个动画,查看timeInterpolator的相关子类和重写TimeInterpolator实现动画的先减速后加速的效果,最后使用objectAnimator和valueAnimator去加载重写TypeEvaluator的动画效果。

黑马程序员安卓教程:Properties集合和流对象相结合(二)

黑马程序员安卓教程:Properties集合和流对象相结合(二)

Properties集合和流对象相结合(二)1.import java.io.BufferedReader;2.import java.io.File;3.import java.io.FileInputStream;4.import java.io.FileReader;5.import java.io.FileWriter;6.import java.io.IOException;7.import java.util.Properties;8.9.public class PropertiesDemo{10. public static void main(String[] args) throws Exception {11. propertiesDemo();12. }13.14. public static void propertiesDemo() throws Exception {15. Properties prop = new Properties();16.17. //集合中的数据来自于一个文件。

18. //注意:必须要保证该文件中的数据是键值对。

19. //需要使用到读取流20. FileInputStream fis = new FileInputStream("info.txt" );21.22. //使用load方法23. prop.load(fis);24. prop.list(System.out);25.26. test();27. myLoad();28. }29.30. //对已有的配置文件中的信息进行修改。

31. //读取这个文件。

并将这个文件中的键值数据存储到集合中。

再通过集合对数据进行修改。

32. //再通过流将修改后的数据存储到文件中33. public static void test() throws Exception {34. //读取这个文件35. File file = new File("info.txt" );36. if(!file.exists()){37. file.createNewFile();38. }39. FileReader fr = new FileReader("info.txt" );40.41. //创建集合存储配置信息42. Properties prop = new Properties();43.44. //将流中信息存储到集合中45. prop.load(fr);46.47. prop.setProperty( "wangwu","26" );48.49. FileWriter fw = new FileWriter(file);50.51. prop.store(fw, "");52.53. fr.close();54. }55.56. //模拟一下load方法57. public static void myLoad() throws Exception {58. Properties prop = new Properties();59.60. BufferedReader bufr = new BufferedReader(newFileReader("info.txt" ));61.62. String line = null;63.64. while((line = bufr.readLine()) != null){65. if(line.startsWith("#" ))66. continue;67. String[] arr = line.split( "=");68. prop.setProperty(arr[0],arr[1]);69. }70.71. prop.list(System.out);72. bufr.close();73. }74.}75.运行结果:。

Android动画教程之属性动画详解

Android动画教程之属性动画详解

Android动画教程之属性动画详解简介Android 开发中,总是需要⼀些动画来优化⽤户的交互体验,提⾼⽤户满意度。

因此,Google 为我们提供了⼀些⽤于处理动画效果的动画框架。

Android 的动画框架分为两类:传统动画(Animation):通过系统不断调⽤onDraw⽅法重绘界⾯,来达到动画的效果。

属性动画(Animator):通过操纵⼀个属性的get/set⽅法,真实地改变⽬标的某些属性。

传统动画框架的局限性既然有了传统动画框架,Google 为什么还要创造⼀个属性动画框架呢?我们下⾯举个例⼦来说明⼀下传统动画的局限性。

在布局中加⼊⼀个 ImageView 和⼀个 Button,点击 ImageView 后弹出⼀个 Toast,点击 Button 后使 ImageView 展现⼀个向右平移的动画效果。

下⾯是使⽤传统动画实现的代码:TranslateAnimation animation = new TranslateAnimation(0,200,0,0); // 平移动画x轴移动200,y轴不动animation.setDuration(1000); // 动画时长animation.setFillAfter(true); // 使动画结束后停留在结束的位置mIvPicture.startAnimation(animation);运⾏后,ImageView 确实进⾏了我们预期的平移的效果。

可是当我们尝试点击 ImageView 当前的位置时,却没有 Toast 弹出。

我们再尝试去点击 ImageView 开始动画前的位置,却成功弹出了 Toast。

这就是传统动画很⼤的局限性:它仅仅是重绘了控件,改变了其显⽰的位置。

但真正事件响应的位置,却并没有发⽣改变。

因此传统动画不适合做具有交互的动画效果。

仅仅能做⼀些显⽰的动画效果。

传统动画是不断通过 onDraw() ⽅法重绘界⾯,必然会⼗分耗费GPU资源。

图文详解Android属性动画

图文详解Android属性动画

图⽂详解Android属性动画Android中的动画分为视图动画(View Animation)、属性动画(Property Animation)以及Drawable动画。

从Android 3.0(API Level 11)开始,Android开始⽀持属性动画,本⽂主要讲解如何使⽤属性动画。

关于视图动画可以参见博⽂《Android四⼤视图动画图⽂详解》。

⼀、概述视图动画局限⽐较⼤,如下所述:1、视图动画只能使⽤在View上⾯。

2、视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差异,并导致了⼀系列怪异⾏为,⽐如在使⽤了视图动画TranslateAnimation的View的UI上对其触摸,你可能惊讶地发现并没有触发触摸事件。

鉴于视图动画以上缺陷,从Android 3.0引⼊了属性动画。

属性动画具有以下特性:1、属性动画应⽤⾯更⼴,不仅仅应⽤于View,可以将其应⽤到任意的对象上⾯,且该对象不需要具有UI界⾯。

2、当将属性动画作⽤于某个对象时,可以通过调⽤对象的setXXX⽅法实际改变对象的值。

所以,当将属性动画作⽤于某个View时,View对象对应的属性值会被改变。

我们看⼀下属性动画时如何⼯作的。

其实属性动画的⼯作原理并不复杂,假设⼀个对象有⼀个属性x,我们想通过属性动画动态更改该值,假设我们想在40ms内将x的值从0渐变到40,那么如下图所⽰:随着时间的增长,对应的x值也相应地线性渐变,当动画完成时,x的值就是我们设置的最终值40。

如果x值线性渐变,那么x 的变化速度就是匀速的。

其实,我们也可以变速地改变x的值,这会我们可以⼀开始加速增加x的值,后⾯减速增加x的值,如下图所⽰:如上图所⽰,在前20ms,x值加速增⼤,在后20ms,x值增⼤的速度降低。

其实,每种改变x值速度的⽅式都叫做时间插值器TimeInterpolator,第⼀张图中使⽤的时间插值器叫做LinearInterpolator,第⼆张图中使⽤的时间插值器叫做AccelerateDecelerateInterpolator。

Android基础夯实--重温动画(五)之属性动画ObjectAnimator详解

Android基础夯实--重温动画(五)之属性动画ObjectAnimator详解

Android基础夯实--重温动画(五)之属性动画ObjectAnimator详解只有⼀种真正的英雄主义⼀、摘要ObjectAnimator是ValueAnimator的⼦类,它和ValueAnimator⼀样,同样具有计算属性值的功能,但对⽐ValueAnimator,它会更加容易使⽤,因为它不再需要设置监听器来监听值的变化,因为这个⼯程对于ObjectAnimator来说,是⾃动的。

这篇⽂章主要通过详细讲解ObejctAniamtior,加深⼤家对属性动画的认识,让我们对于动画的技巧掌握得更扎实。

如果你想了解更权威的解释,可以查看官⽅⽂档:。

本⽂主要对ValueAnimator做介绍,如果⼤家有兴趣,可以继续阅读本动画系列其他相关⽂章,作者也在不断更新完善相关内容,希望⼤家可以指出有误之处。

⼆、概述在上节我们知道了在属性动画中,ValueAnimator是通过监听值的变化,然后实现控件的动画播放。

在代码过程中,是通过设置初始值、结束值和动画时间,然后通过加速器返回当前的进度的,再经过Evaluator根据进度计算出具体的值,然后我们在监听器⾥⾯不断监听拿到这个值,然后修改控件的属性值,从⽽实现动画。

ObjectAnimator作为ValueAnimator的⼦类,所以ValueAnimator的很多⽅法,在ObjectAnimator中也能使⽤,但是ObjectAnimator覆写了⽗类的⼏个⽅法,如ofInt(),ofFloat(),ofArgb()等。

它和ValueAnimator同样也是⾸先设置初始值、结束值和动画时长,但是同时也绑定了⽬标控件和属性然后通过加速器返回当前的进度的,再经过Evaluator根据进度计算出具体的值,最后根据属性拼接set函数并反射调⽤,并将当前值作为参数传⼊,实现动画。

对⽐这两个Animator,ObjectAnimator是对ValueAnimator的再封装,它的封装帮助我们避免了使⽤Listener的⿇烦,更加精简了代码,使开发者可以更加专注动画的逻辑代码。

黑马程序员安卓教程:渐变动画

黑马程序员安卓教程:渐变动画

黑马程序员安卓教程:渐变动画渐变动画也叫补间动画。

补间动画通过对 View 的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。

动画效果的定义可以采用 XML 文件来做也可以采用 java 代码来做。

补间动画有 4 种类型:1. Alpha 渐变动画渐变动画在代码中使用的是 AlphaAnimation 类来定义,在 XML 文件中使用<alpha>节点来定义。

下面分别演示使用 XML 文件和 Java 代码的方式实现 Alpha 渐变动画。

1)使用 XML 文件实现 Alpha 动画1.在 res 目录下创建 anim 文件夹。

2.在anim文件夹中创建alpha_anim.xml文件,文件名可以自定义,这里叫alpha_anim.xml。

3.编辑alpha_anim.xml文件,文件清单如下【文件 1-9】alpha_anim.xml1.<?xml version="1.0"encoding="utf-8"?>2.<alpha xmlns:android="/apk/res/android"3.android:duration="1000"4.android:fromAlpha="1"5.android:repeatCount="2"6.android:toAlpha="0"7.android:repeatMode="restart"8.>9.</alpha>上面使用到的属性解释如下:duration 动画时长fromAlpha 起始透明度,1 位完成不透明,0 为完全透明repeatCount 重复次数toAlpha 目标透明度repeatMode 重复模式,restart 为重新开始添加Java逻辑代码:使用AnimationUtils工具类加载xml文件,获取Animation对象;调用startAnimation 让 ImageView 执行此动画。

Android属性动画实战

Android属性动画实战

Android属性动画实战什么是属性动画?属性动画可以通过直接更改 View 的属性来实现 View 动画。

例如:1.通过不断的更改 View 的坐标来实现让 View 移动的效果;2.通过不断的更改 View 的背景来实现让 View 的背景渐变的效果;3.通过不断的更改 View 的宽高来实现让 View 变形的效果;4....由此可见,利用属性动画几乎可以处理任何的涉及到 View 的动画效果。

实战具体的细节就不多说了,网上相应的教程也不少。

这篇博客主要是来实现类似于美团外卖购物车的效果。

分析首先分析购物车动画具体的细节:在滑动过程中,“购物车”向右移动,直至一半隐藏到右侧;在手指停留在屏幕中时,“购物车”还隐藏在右侧;当手指离开屏幕,“购物车”在一定时间后重新移动回来。

以上的动画细节可以分析出和RecycleView 的滚动事件息息相关,因此动画就应该在 RecycleView 的滚动事件中实现。

实现基本布局上图的蓝色图片既是我们要处理的 View 。

给 RecycleView 加上滚动事件接下来给RecycleView 加上滚动事件,滑动或者飞翔时图片消失,当停止滑动时图片显示。

1 // 给rv加上滚动事件2 rv.addOnScrollListener(new RecyclerView.OnScrollListener() {3 @Override4 public void onScrollStateChanged(@NonN ull RecyclerView recyclerView, int newState) {5 switch (new State) {6 case RecyclerView.SCROLL_STATE_DRAGGING:// 滚动中 7 case RecyclerView.SCROLL_STATE_SETTLING:// 飞翔中 8 iv.setVisibility(View.GONE); 9 break;10 case RecyclerView.SCROLL_STATE_IDLE:// 停止滚动11 iv.setVisibility(View.VISIBLE);12 break;13 }14 }15 });效果图:实现消失的动画根据上面的图可以发现触发时机基本是没问题了,接下来要做的是让消失不突兀,加上消失的动画。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

属性动画集合
属性动画和补间动画一样,也提供了动画集合。

【文件1-19】属性动画集合的实现核心代码
1./**
2.* 属性动画集合的实现
3.*/
4.public void animatorSet(View view){
5.ObjectAnimator oaTranslate = ObjectAnimator.ofFloat(iv, "translationX", 0,100);
6./*
7.* 设置重复次数,默认为0就是不重复,1则代表再重复一次,
8.* 注意是再重复一次,也就是总共执行了两次
9.*/
10.oaTranslate.setRepeatCount(1);
11./**
12.* 设置重复模式,有两个值可选:
13.* 1. RESTART 当一个动画到达结尾时,如果需要重复播放,那么就初始位置状态开始播放
14.* 2. REVERSE 当一个动画到达结尾时,如果需要重复播放,那么就从结束状体开始逆向播放
15.* 举个最简单的例子:对于位移动画从0移动到100,如果使用的是RESTART模式,
16.那么每次结束后都会
17.* 头重新开始,如果使用的是REVERSE模式,那么重复时就从结束的100的位置移动到0位置,
18.做了一个往返操作。

19.*
20.*/
21.oaTranslate.setRepeatMode(ValueAnimator.REVERSE);
22.//设置时长
23.oaTranslate.setDuration(2000);
24.//缩放动画
25.ObjectAnimator oaScale = ObjectAnimator.ofFloat(iv, "scaleX", 0.5f);
26.oaScale.setDuration(2000);
27.
23
28.AnimatorSet as = new AnimatorSet();
29.//依次执行动画
30.as.playSequentially(oaTranslate,oaScale);
31.//同时执行
32. //as.playTogether(oaTranslate,oaScale);
33.//开始执行动画集合
34.as.start();
35.
36.}。

相关文档
最新文档