白龙软件商店面试问题整理(三)
1.如何设置自动轮播效果。
实现原理都是通过
Handler
发送延时消息。队列,在Thread
当中实现反复发送。1.
getHandler().postDelayed(runable, 1000);
或者
handler.sendMessageDelayed(msg, delayMillis);
发送空的延时消息Handler
队列。
2.卡片布局的实现思路。
实现相对简单。就是该是什么布局就就制作成什么布局。图片可以使用
BitmapUtils
来进行网络加载由于的图片的大小不太可控。展示效果不仅人意。我们通过
RatioLayout
按照布局来实现确定卡片内部的布局实现思路。
3.下拉动画的实现原理
ValueAnimator
设置ValueAnimator.ofInt(endHeight, startHeight);
开始高度和结束高度。
ValueAnimator
添加addUpdateListener(new AnimatorUpdateListener()
。改变简体
getLayoutParams()
获取布局参数,改变高度,设置设置setLayoutParams(mParams)
实现改变参数。子线程查找父布局
ScrollView
,设置scrollView.fullScroll(ScrollView.FOCUS_DOWN);
。展现到底操作。
4.自己写布局实现思路
new RelativeLayout(UIUtils.getContext());
一个布局
setLayoutParams(params)
设置布局参数。
注意:主控件高度heighe
不能使用LayoutParams.MATCH_PARENT
,必须写死,有可能是在加载布局的时候没有撑起来,所以子控件就 没法加载出来。
View.addView(newViwe)
,添加子控件,并设置在父控件当中的LayoutParams
中的位置。展示
5.多布局推荐页面设计
重写
getViewTypeCount()
,
position
判断是否返回不同的布局。
6.ListView
显示加载更多的原理
重写
getViewTypeCount()
方法,返回布局数为2
。重写
getItemViewType()
根据位置返回不同的类型,必须从0
开始,根据
getView()
判断加载布局类型。一般是position
的位置来确定是否要加载更多布局。开启子线程加载需要的数据,获取数据,根据情况
setVisibility(View.GONE);
填充
list.addAll(morelist)`` notifyDataSetChanged();
改变数量。
7.Adapter
的各个方法之间的调用发发
系统会不断调用
getViewTypeCount()
系统会不断调用该方法,。
getItemViewType()
系统也会不断调用该方法。来判断当前显示
的布局。当这里返回的布局不是普通
布局的时候。getView
当中的convertView
就会为null
。
8.软件下载
实现原理
通过观察者模式。各自的对象的观察者,
如果下载状态发生改变。通知观察者来更
状态
通过
whrite()
的写入状态动态
实现进度条的更新。
9.HashMap
线程安全问题
HashMap
其实是线程不安全的。
ConcurrentHashMap
线程安全。