Android 面试题总结(三)
2016-04-07 00:30
393 查看
前言
经过近两周的面试其实一共也没面几家,笔者最终还是敲定了下家,虽然现在竞争比较激烈,但作为一名技术人员,只要肯于提升内在,让自己真实有”料”,其实也蛮受市场欢迎.正文
1.Android 屏幕适配:http://blog.csdn.net/zhaokaiqiang1992/article/details/45419023
dp、dip、dpi、sp、px:
px:像素,大多数情况下,比如UI设计、Android原生API都会以px作为统一的计量单位
dip和dp:是一个意思,都是Density Independent Pixels的缩写,即密度无关像素
dpi:是屏幕像素密度
sp:,即scale-independent pixels,与dp类似,但是可以根据文字大小首选项进行放缩,是设置字体大小的御用单位
mdpi、hdpi、xdpi、xxdpi:表示像素密度范围
2.Service的生命周期:
ios与android设备即时语音互通的录音格式:
微信语音本地文件都是使用的amr格式.
**amr:**ios 4.3之前的版本支持,以后版本都不支持amr格式,android设备支持该格式,采用这种格式,ios设备可用libOpenCore第三方库进行转换,播放时再进行解码成原始pcm进行播放。android设备可直接录制与播放
AMR格式的压缩比例应该是比较大,但是在语音的使用场景中影响不大,并且数据量小利于传输等优点
mp3: ios,android录制都 需要进行编码转换,使用lame第三方库,播放应该都可以直接播放
**iLBC:**ios支持编码解码, android 低版本不支持,不过有开源第三方库,可以进行录制编码,播放解码的处理
Speex:也是开源的第三方库,声称文件小,能降噪,需要ios,android客户端都进行编码解码处理
4.Android动画基础:
http://b.codekk.com/blogs/detail/559623d8d6459ae793499787
http://blog.csdn.net/singwhatiwanna/article/details/17841165这里写链接内容
Tween 动画:(渐变动画)主要有4种,缩放、平移、渐变、旋转
:一个持有其它动画元素的容器
:一个渐入渐出的动画,对应的 java 类为 AlphaAnimation
:缩放动画,对应的类为:ScaleAnimation
:代表一个水平、垂直的位移。对应的类为 TranslateAnimation
:代表一个旋转动画,与之对应的 Java 类是 RotateAnimation
interpolator:插值器,用于修改一个动画过程中的速率,可以定义各种各样的非线性变化函数,比如加速、减速等.
Frame 动画:(画面转换动画)
:必须作为根元素,包含一个或者多个根元素
:一帧独立动画,必须是 的子元素
Property Animation:属性动画,通过动态地改变对象的属性从而达到动画效果
TimeInterpolator:时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比.系统预置的有LinearInterpolator(线性插值器:匀速动画)、AccelerateDecelerateInterpolator(加速减速插值器:动画两头慢中间快)和DecelerateInterpolator(减速插值器:动画越来越慢)等
TypeEvaluator:类型估值算法.它的作用是根据当前属性改变的百分比来计算改变后的属性值,系统预置的有IntEvaluator(针对整型属性)、FloatEvaluator(针对浮点型属性)和ArgbEvaluator(针对Color属性)
注:属性动画要求该属性有set方法和get方法(可选).自定义插值器需要实现Interpolator或者TimeInterpolator,自定义估值算法需要实现TypeEvaluator。还有就是如果你对其他类型(非int、float、color)做动画,你必须要自定义类型估值算法。
属性动画根据你传递的该熟悉的初始值和最终值,以动画的效果多次去调用set方法,每次传递给set方法的值都不一样,确切来说是随着时间的推移,所传递的值越来越接近最终值。总结一下,你对object的属性xxx做动画,如果想让动画生效,要同时满足两个条件:
object必须要提供setXxx方法,如果动画的时候没有传递初始值,那么还要提供getXxx方法,因为系统要去拿xxx属性的初始值(如果这条不满足,程序直接Crash)
object的setXxx对属性xxx所做的改变必须能够通过某种方法反映出来,比如会带来ui的改变啥的(如果这条不满足,动画无效果但不会Crash)
针对上述问题,Google告诉我们有3中解决方法:
给你的对象加上get和set方法,如果你有权限的话.(无法实现,这是Android SDK内部实现的)
用一个类来包装原始对象,间接为其提供get和set方法.(推荐)
private void performAnimate() { ViewWrapper wrapper = new ViewWrapper(mButton); ObjectAnimator.ofInt(wrapper, "width", 500).setDuration(5000).start(); } @Override public void onClick(View v) { if (v == mButton) { performAnimate(); } } private static class ViewWrapper { private View mTarget; public ViewWrapper(View target) { mTarget = target; } public int getWidth() { return mTarget.getLayoutParams().width; } public void setWidth(int width) { mTarget.getLayoutParams().width = width; mTarget.requestLayout(); } }
3. 采用ValueAnimator,监听动画过程,自己实现属性的改变 **ValueAnimator**本身不作用于任何对象,也就是说直接使用它没有任何动画效果。它可以对一个值做动画,然后我们可以监听其动画过程,在动画过程中修改我们的对象的属性值,这样也就相当于我们的对象做了动画
ValueAnimator valueAnimator = ValueAnimator.ofInt(1, 100); valueAnimator.addUpdateListener(new AnimatorUpdateListener() { //持有一个IntEvaluator对象,方便下面估值的时候使用 private IntEvaluator mEvaluator = new IntEvaluator(); @Override public void onAnimationUpdate(ValueAnimator animator) { //获得当前动画的进度值,整型,1-100之间 int currentValue = (Integer)animator.getAnimatedValue(); Log.d(TAG, "current value: " + currentValue); //计算当前进度占整个动画过程的比例,浮点型,0-1之间 float fraction = currentValue / 100f; //这里我偷懒了,不过有现成的干吗不用呢 //直接调用整型估值器通过比例计算出宽度,然后再设给Button target.getLayoutParams().width = mEvaluator.evaluate(fraction, start, end); target.requestLayout(); } }); valueAnimator.setDuration(5000).start();
nineoldandroids:
其功能和android.animation.*中的类的功能完全一致,使用方法完全一样,只要我们用nineoldandroids来编写动画,就可以在所有的Android系统上运行.
备注:
1.View动画(渐变动画)的功能是有限的,大家可以尝试使用属性动画
2.为了在各种安卓版本上使用属性动画,你需要采用nineoldandroids
3.属性动画中的插值器(Interpolator)和估值器(TypeEvaluator)很重要,它是实现非匀速动画的重要手段
View anim 与 property anim 的比较:
View anim 系统:
1.view animation system 在 View 动画的展现方面也是有约束的,只暴露了 View 的很少方面。比如 View 支持缩放和旋转,但不支持背景颜色的动画。
2.其改变的是 View 的绘制效果,真正的 View 的属性保持不变,比如无论你在对话中如何缩放 Button 的大小,Button 的有效点击区域还是没有应用到动画时的区域,其位置与大小都不变
3.View anim优点:只需花费很少时间创建而且只需很少的代码
property anim 系统:
1.并且当属性变化的时候,property Anim 系统会自动的刷新屏幕.
2.
相关文章推荐
- 一个关于if else容易迷惑的问题
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件