一, 动画
1, 分类
3.0 之前
帧动画 FrameAnimation (Drawable Animation)
补间动画 TreenAnimation (View Animaction)
3.0 之后
属性动画 PropertyAnimation
2, 帧动画
改变的是图层, 正在的属性还在以前的位置
资源文件创建方式:
一系列图片, 一帧一帧的播放出来
2.1 文件夹: res/drawable
2.2 根节点: <animation-list/>
<animation-list>
<item android:drawable ="图片id" adroid:duration = "持续时间,毫秒"/>
</animation-list>
2.3 在代码中, 设置背景资源 android:background=""
2.4 获取AnimationDrawable 管理器对象, 调用start() 方法开启动画
调用stop() 方法停止动画
代码创建方式
1, 声明动画管理器对象
AnimationDrawable drawable = new AnimationDrawable();
2, 向动画管理器中添加动画
drawable.addFrame(getResources().getDrawable(图片id),持续时间);
3, 为控件设置动画资源
mIv.setImageDrawable(drawable);
4, 启动动画
drawable.start(); drawable.stop();
5, 默认动画执行一次
drawable.setOneShot(false);//true 执行一次, false 执行多次
3, 补间动画 *****
开发者只需要提供开始和结束的动画, 中间的位置由系统自动补齐
分类:
透明度(渐变) alpha <alpha/>
缩放 scale <scale/>
旋转 rotate <rotate/>
位移 translate <translate/>
集合 set <set>
资源文件的创建方式
存放的目录: res/anim
节点: <alpha/>,<scale/>,<rotate/>,<translate/>,<set>
1, 在资源文件中创建xml文件
2, 在java代码中, 启动动画资源
mIv.startAnimation(AnimationUtils.loadAnimation(this,动画资源的id));
代码创建方式
1, 得到Animation对象
AlphaAnimation
ScaleAnimation
RotateAnimation
TranslateAnimation
AnimationSet
2, 设置持续时间
3, 为控件启动动画
mIv.startAnimation(AnimationUtils.loadAnimation(this,动画资源对象));
4, 属性动画 -- 增强版的补间动画
属性和图层一起发生变化
资源文件创建
4.1 存放的路径
res/animator
4.2 节点
单个动画: <objectAnimator/>
动画集合: <set/>
4.3 属性名称:
位移: translationX translationY
旋转: rotation rotationX rotationY
缩放: scaleX scaleY
透明: alpha
代码创建动画
单个动画
ObjectAnimator animator =ObjectAnimator.ofFloat(控件, "属性名称",可变长度的数组-值);
animator.start();
集合动画:
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.play(播放的动画).with(动画2);
animatorSet.start();
二,Frasco的使用
Frasco 是FaceBook 出品的, 在C++层处理, 大大的降低了OOM异常
步骤:
1, 导入依赖
2, 初始化Fresco -- 在Application 的子类中
3, 在清单文件中, 引入MyApp
4, 在布局页面中添加控件
4.1 在根节点中, 引入第三方命名空间
4.2 创建控件
<com.facebook.drawee.view.SimpleDraweeView
android:id = "@+id/sdv_id"
fresco:placeholderImage="占位图片"
/>
4.3 加载图片
mSdv.setImageUri(Uri.parse("加载图片的绝对路径"));
5, 添加权限
三,Butterknife的使用
注入框架: View , Resource, Action
代替了: findViewById() , 点击事件监听器
步骤:
1, 导入依赖
2, 在Activity的onCreate() 方法, 绑定ButterKnife
Unbinder unbinder = ButterKnife.bind(this);
//Unbinder unbinder = ButterKnife.bind(this,View); Fragment和适配器中
3, 注解
View 注解
Resource 注解
事件注解
4, 在Activity的onDestroy(), 解绑
unbinder.unBind();
四,Retrofit的使用
网络框架 -- xUtils一样
1, 导入依赖
2, 定义一个接口, 在接口中需要返回一个Call
@GET("地址值")
Call<实体类> getInfo();
3, 定义一个实体类 -- 数据的实体类
4, 在Activity中通过Retrofit获取网络数据
4.1 声明Retrofit 的构建者
4.2 设置基础地址
4.3 设置Gson解析
4.4 得到Retrofit对象
4.5 得到自定义的接口
4.6 调用接口中的方法, 得到Call对象
4.7 通过Call 中的 enqueue() 方法, 异步加载数据
5, 添加权限
五, 案例( 一 --- 四 , 综合案例)
1, 使用Retrofit获取网络数据
2, 控件初始化通过ButterKnife
3, 图片的处理使用Fresco
4, 点击图片, 实现图片的旋转动画
七, 自定义View
为什么使用:
1, 解决控件嵌套的事件冲突问题
2, 当前的控件没有办法满足开发需要
3, 优化布局, 封装代码...
分类:
1, 继承View --- 完全自定义的View
2, 继承已有控件 --- 在现有控件的基础上拓展
3, 继承ViewGroup及其子类 -- 定义组合控件
方法:
onDraw() 绘制
onMeasure() 测量的方法--测量自己
onLayout() 排版布局的方法 -- 排版当前控件中的子控件摆放方式
构造方法:
一个参数
在java代码中, 定义控件时使用
两个参数
在布局页面中, 使用自定义控件的时候调用
练习:
View中的具体内容是一个同心圆中包含一段红色的文字“已经选中商品!
八, Tablayout + ViewPager + Fragment的使用
Tablayout 导航 Design包中, 导入依赖
ViewPager 视图切换页面 V4包
Fragment 切换的每个页面 V4包
九, AIDL的简单使用
Android Interface Definition Language 安卓接口定义语音
作用: 实现了跨进程间的通信 --- 两个App , 绑定服务
1, 服务端 ServerApp
1.1 在src/main 目录中, 创建一个aidl 文件 .aidl结尾
1.2 在文件中, 定义一个方法, 没有修饰符
1.3 编译-- .aidl 编译成 同名的.java文件
1.4 声明一个服务类, 绑定服务的方法
1.5 在清单文件中注册 -- 提供action动作
2, 客户端
2.1 复制, 服务端的src/main 目录中的aidl文件夹, 复制到客户端的同级目录中
2.2 编译客户端中的aidl文件 , 生成.java文件
2.3 绑定服务
十, NDK --- Android sdk 全面加入了"原生"二字, 谷歌简称为ndk
Native Development Kit --- NDK 本地开发服务
Native : 基于操作系统开发 C/C++
JNI : JAVA 调用 C/C++的规范, 没有jni 则不能实现java调用C/C++
NDK 生成的.h中的方法名称,组成的部分是:
"注意" .h中的方法名称 = Java + java类的包名 + java类的类名 + java类的方法名称
步骤:
1, 安装
File -- > Setting --- > Android sdk --> sdk tools -- >选择ndk ---> 下载安装
cmd doc命令中--- > 执行: ndk-build命令, 检测ndk是否安装成功
2, 使用ndk
2.1 新建一个工程
2.2 配置ndk 的环境 --- 只需要确认即可, 在安装的同时, 系统已经配置完成
需要的文件: .java ---> .class---> .h --->.c --->so包
2.3 在java包中, 创建一个普通的java类 JniTest.java, 在类中声明一个native 修饰的方法
public class JniTest
{
public static native String getInfo();
}
2.4 编译后: Build --- > make module "App"
2.5 首先得打开studio 中 Terminal工具, 切换目录到app/src/main目录中
1, cd app/src/main
2, javah -d jni -classpath ../../build/intermediates/classes/debug 包名.类名
2.6 复制.h的文件名称, 在同一个目录中, 创建同名的.c文件
.h 的文件名称 必须和 .c 的文件名称一致
"返回你想对java类说的话"
return (*env)->NewStringUTF(env,"Hello AS....");
2.7 生成so文件
编译 : Build --> make module "App"
如果报错:
在gradle.properties文件中追加下面代码即可:
android.useDeprecatedNdk=true
2.8 引入so包, 在 2.3步骤创建的java类中, 引入
static{
System.loadLibrary("app");
}
2.9 在Activity 调用的地方, 获取数据
String str = JniTest.getInfo();
十一: Webview的使用
主要的类:
WebView 控件 -- 加载网页(本地, 外网)
WebViewClient 网页加载的处理器
作用:
1, 设置页面在当前的应用中打开
2, 返回页面加载的状态(页面开始加载, 页面加载完成)
3, 重定向网页(Fragment中必须设置)
WebSetting webView的设置信息
支持js
支持js弹出窗口
WebChromeClient 和页面加载的交互
1, 显示当前加载的进度
2, 获取js弹出的性信息
方法:
1, loadUrl()
加载网页
2, loadData(代码String,"text/html",null)
加载页面的代码("不能有中文")
3, loadDataWithBaseURL(null,String类型的代码, "text/html","UTF-8",null)
加载页面的代码("可以显示中文")
4, canGoBack()
检测是否能够后退
5, goBack()
回退
6, canGoForward()
检测是否能够前进
7, goGorward()
前进
8, reload()
刷新页面
9, stopLoading()
停止加载页面
实例:
使用WebView 加载图片地址
小总结
最新推荐文章于 2019-12-11 17:09:48 发布
567

被折叠的 条评论
为什么被折叠?



