2024年安卓最全Android Launcher——ui框架,2024年最新数据结构与算法面试题库

最后

跳槽季整理面试题已经成了我多年的习惯!在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1.先看图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是我正在研究的一个800*480的launcher的ui框架图,对应的桌面显示效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面一行应用是我修改桌面后的结果,在前面我的ui框架图中没有。

闲话不多说,下面就一一做出讲解

1.DragLayer–DragLayer继承FrameLayout,并在此基础上组合了DragController实现拖放功能,DragLayer主要监听下面两个用户事件

onInterceptTouchEvent

onTouchEvent

交给DragController进行处理,DragController根据是否在拖放中等信息控制控件拖放过程处理。

DragLayer 是Launcher这个activity的顶层view,Launcher2这个应用只有一个activity那就是Laucher.java

2.DeleteZone–打开launcher.xml,DeleteZone默认是不显示的android:visibility=“invisible”

但是我们每次开始拖放图标的时候DeleteZone就显示了,它是怎么实现的呢?DeleteZone实现了DragController.DragListener接口,DragListener提供两个接口方法,

onDragStart:隐藏把手,显示DeleteZone

onDragEnd:显示把手,隐藏DeleteZone

分别在开始DragController开始拖放和结束拖放的时候被调用.

另外DeleteZone实现了DropTarget接口,一旦鼠标把图标拖放到DeleteZone,就会调用DeleteZone

实现的onDrop方法对应用图标进行删除处理。

3.ClippedImageView–屏幕左右移动按钮,正常图标很小,你只能看到小点,我设置view背景不透明为绿色如前面我的截图

ClippedImageView要注意三点,

–1.桌面左右移动时Drawable的变换,变换图标列表可查看home_arrows_right.xml

,ClippedImageView通过把drawable传递给worksapce,当桌面切换时通过调用Drawable.setLevel函数实现不同图标显示。

–2.点击ClippedImageView实现左右桌面切换,查看ClippedImageView的布局文件

android:onClick=“previousScreen”,该属性定义了一个ClippedImageView onClick事件响应函数,函数在布局文件对应的Activity中定义

也就是在Launcher.java中定义

/**

* @Description:用户点击前一个桌面按钮

* @param v

* @Others:

*/

@SuppressWarnings({“UnusedDeclaration”})

public void previousScreen(View v) {

if (!isAllAppsVisible()) {

mWorkspace.scrollLeft();

}

}

–3.在ClippedImageView初始化(Launcher.setupViews)中添加了长按事件OnLongClickListener有当长按ClippedImageView,会执行

launcher.onlongclick方法,方法执行显示5个桌面的预览微缩图显示,具体实现不做深入说明,后面将作深入研究。

4.RelativeLayout–android:id=“@+id/all_apps_button_cluster”,如前面截图右边灰色竖状条,它是一个相对布局对象,上面承载了三个view

中间是一个HandleView,是一个进入allappview的按钮,HandleView的上下都是一个进入google搜索的imageview

–HandleView

–1.点击事件 传递给Launcher.onClick进行处理 显示应用菜单view

–2.长按事件 传递给Launcher.onLongClick进行处理,方法执行显示5个桌面的预览微缩图显示

–google搜索的imageview

–onClick响应:android:onClick=“launchHotSeat”

5.AllApps2D – 菜单view,在launcher.xml中引用的是:

<include

layout=“@layout/all_apps” />

all_apps.xml定义如下:

中间增加了一个层次,如果有需要可以定义自己的apps_3d布局

AllApps2D包括两个view

–1.GridView android:id=“@+id/all_apps_2d_grid” 应用菜单grid view 它是一个grid view 用来放应用图标

GridView对应的Adapter实现类是AppsAdapter,对应的Adapter布局文件是:application_boxed.xml

–2.view android:id=“@+id/all_apps_2d_home” 应用菜单view右边的home按钮 ,点击隐藏 AllApps2D

6.Workspace–用户桌面包括5个workspace_screen,默认显示的是:launcher:defaultScreen=“0”

最后看一下学习需要的所有知识点的思维导图。在刚刚那份学习笔记里包含了下面知识点所有内容!文章里已经展示了部分!如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值