【Android】Android UI 绘制相关面试题(二)

一、谈谈自定义LayoutManager的流程?

  • 确定Itemview的LayoutParamsgenerateDefaultLayoutParams
  • 确定所有itemview在recyclerview的位置,并且回收和复 用itemviewonLayoutChildren
  • 添加滑动canScrollVertically

二、什么是 RemoteViews?使用场景有哪些?

RemoteViews翻译过来就是远程视图.顾名思义,RemoteViews不是当前进程的View,是属于SystemServer进程.应用程序与RemoteViews之间依赖Binder实现了进程间通信.

用法:通常是在通知栏

//1.创建RemoteViews实例
RemoteViews mRemoteViews=new
RemoteViews("com.example.remoteviewdemo", R.layout.remoteview_layout);
//2.构建一个打开Activity的PendingIntent Intent
intent=new
Intent(MainActivity.this,MainActivity.class);
PendingIntent
mPendingIntent=PendingIntent.getActivity(Main
Activity.this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
//3.创建一个Notification
mNotification = new
Notification.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(mPendingIntent)
.setContent(mRemoteViews)
.build();
//4. 获 取 NotificationManager
manager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE
);
Button button1 = (Button)
findViewById(R.id.button1);
button1.setOnClickListener(new
OnClickListener() {
@Override
public void onClick(View v) {
//弹出通知
manager.notify(1, mNotification);
}
});

三、谈一谈获取View宽高的几种方法?

  • OnGlobalLayoutListener获取
  • OnPreDrawListener获取
  • OnLayoutChangeListener获取
  • 重写View的onSizeChanged()
  • 使用View.post()方法

四、谈一谈插值器和估值器?

  • 插值器,根据时间(动画时常)流逝的百分比来计算属 性变化的百分比。系统默认的有匀速,加减速,减速插值器。
  • 估值器,通过上面插值器得到的百分比计算出具体变化 的值。系统默认的有整型,浮点型,颜色估值器
  • 自定义只需要重写他们的evaluate方法就可以了。

五、getDimension、getDimensionPixelOffset 和getDimensionPixelSize 三者的区别?

相同点:单位为dp/sp时,都会乘以density,单位为px则不乘

不同点:

  • getDimension返回的是float值
  • getDimensionPixelSize,返回的是int值,float转成int时,四舍五入
  • getDimensionPixelOffset,返回的是int值,float转int时,向下取整(即忽略小数值)

六、关于LayoutInflater,它是如何通过inflate 方法获取到具体View的?

系统通过LayoutInflater.from创建出布局构造器,inflate 方法中,最后会掉用createViewFromTag这里他会去判断两个参数factory2 和factory 如果都会空就会系统自己去创建view, 并且通过一个xml解析器,获取标签名字,然后判断是<Button还是xxx.xxx.xxView.然后走createView通过拼接得到全类名路径,反射创建出类。

七、谈谈RecyclerView的缓存机制?

scrap viewCacherecyclerPool: scrap 是当前展示的缓存, 在onlayout时候 缓存viewCache 是屏幕外看不见的缓存, 可以吧viewCache设置大点, 空间换时间 避免段距离内快速滑动卡顿以上两种缓存是不走 createView和 onbind recyclerPool 比较特殊他是会走 onbind的,他可以被多个recyclerView共享内部的item,实际用途是:多个recyclerView之间共享item,应用在 垂直recyclerView 内嵌水平recyclerView,或者viewpager中多个recyclerView

#android面试#
全部评论
多谢大佬!真的很爱!
点赞 回复 分享
发布于 2023-02-17 11:06 广东
从这篇干货开始今天的学习
点赞 回复 分享
发布于 2023-02-17 11:51 辽宁

相关推荐

不愿透露姓名的神秘牛友
10-15 14:22
点赞 评论 收藏
分享
15 1 评论
分享
牛客网
牛客企业服务