今天去参加面试,面试官给人大牛的感觉。确实也是,CSDN博客专家。仔细回忆他问我的几个问题。
1.
Q:Android 中的设计模式其实就是JAVA中的设计模式,那么你说下有哪些常用的设计模式
A:常用的设计模式单例模式,观察者模式,装饰者模式,构造者模式,工厂模式。
Q:那么安卓中系统源码中有哪些模式?
A:BitmapFactory的工厂模式,XmlPaulParserFactory的工厂模式,单例模式,自己用的比较多,但是系统中的源码尚未触碰过。
Q:那么观察者模式呢?
A:这个也比较常用,比如Button的setOnClickListener( )也是观察者模式。Button是被观察者,而设置监听的接口类可以看作是观察者,当Button的状态改变的时候
会回调接口中定义的方法。
2.
Q:属性动画和View动画的区别(受虐了,本以为动画是很简单的,翻阅书籍之后才发现区别很大)
A:
- 第一点:View动画是对View的影像做出平移,缩放,旋转,透明度等动画效果,而非实际的View对象,这就导致在动画结束的时候,对动画停留的位置进行点击是无法出现点击效果的,而在原来的位置(已经看不到View了)点击却可以出现点击效果。
- 第二点:View动画只能对View进行动画操作,不能对自定义View进行动画操作。(我已经看到老师在微笑了......,申明这个观点是在某个博客上一瞥看到的,当时并没有点击进去看,这个回答是错误的。)
Q:为什么View动画不能对自定义View进行动画操作?
A:(结巴了一会),这是我在博客上看到的一个观点吧。
Q:你自己有没有尝试过?
A:我当时回答没有,现在想想应该这么回答好些。自定义View然后实现动画效果这样的场景还没遇到吧,上个观点,我也只是抛出来,并没有完全同意。
Q:属性动画可不可以对任何属性操作?
A:好吧,这个真的难道我了。(会用和理解真的是两个程度)
3.Volley方面的问题
4.Handler的机制(这个回答的蛮好的,毕竟看书看源码)
5.讲讲项目
那么回来之后赶紧翻阅《Android 开发艺术探索》,之前看过书上一章是深入讲解动画的。以为简单就跳过了。
View动画的分类:帧动画,View动画(补间动画),属性动画
接下来的分析会参照Android 开发艺术探索
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true">
<scale
android:fromXScale="0.5"
android:fromYScale="0.5"
android:toXScale="1.2"
android:toYScale="1.2"
android:duration="1000"
android:pivotX="0"
android:pivotY="100%"
/>
</set>
最需要注意的是两个属性吧:pivotX 和 pivoY这两个属性吧。设置View的缩放点,很明显不同的缩放点,照成的缩放效果是不同的。可以仔细想想。那么缩放点是根据整个屏幕来确定呢,还是根据View本身大小来计算的缩放点呢?通过设置x,y都为100%的情况下看到缩放的效果为在View的右下角,所以缩放点是根据View的自身大小来确定的。
View动画不难,也只有平移,缩放,旋转,透明度改变的动画,虽然可以自定义动画效果,但这个场景我没遇到过,遇到过在好好了解下。
接下里说的是一些Activity动画,LayoutAnimation动画等。主要运用在ListView中,因为有许多item,那么用动画加载每个item便会显得好看些。不过RecyclerView逐渐替代了ListView。
直接在anim/anim_layout
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/anim_set">
</layoutAnimation>
delay属性是根据我在anim_set中定义的动画duration所持续的时间 * delay因子得到的时间。
那么如何应用在ListView上呢?
android:layoutAnimation="@anim/anim_layout "注意哦,这个属性即时是relativeLayout也可以设置的,我已经试过啦。
Activity的进出动画比较简单些,定义两个个translate的动画entry_anim和exit_anim。
在startActiviyu之后调用overPendingTranslation(R.anim.entry_anim,R.anim.exit_anim);
属性动画可以对任意对象的属性而不是仅仅对View的属性才可以实现动画效果。