Android-自定义View集合

2023-05-16

学习安卓几个月了,也有点自己的体会,然而我发现自己真正喜欢的是数据方面的东西,当然android自定义view也很好玩,很体验一些技巧性的东西。也不想自己以前学习过程总结的东西就此淹没,于是我就决定把自己的一些在android研究过的东西全部都分享出来啦。这个是自定义View系列,如果觉得我写的还行的话,可以在一起讨论,我还是可以帮忙写下一些特别的点的自定义view的。


文章结构:

1.罗列分享我学习过程中写的自定义view;
2.针对个别特殊的自定义view讨论下重要的思路部分;
3.给出一些自定义view学习资源汇总;
4.我学习自定义view的库,喜欢的支持的可以给下star或fork啦。


一、罗列分享我学习过程中写的自定义view

如下图:根据图中的去按照我的文章分点,以及最后给的源码结合来看吧,里面有我学习过程中的很多解释,虽然有的有点啰嗦,但很完整体现了我的思路了。

在这里插入图片描述

在这里插入图片描述


二、针对个别特殊的自定义view讨论下重要的思路部分

(1)上面两个仿美团上方栏的效果:

第一个方案的 是xml中用radiobutton强制写死了大概多少个滑动页面的引导小圆点,这种方案可见复用性不高。实现步骤是:1.编写页面,使用一viewpager和一radiogroup组合做出效果;2.重要的是自定义viewpager的适配器;3.在controller的activity中实现耦合,往viewpager加入gridview,将gridview传给viewpager的适配器,用radiogroup的基本逻辑实现引导的小圆点UI。
第二种方案是我反编译了一下美团,看了下他们的大致布局,以及耦合的代码,实现的仿造。大致过程还是跟第一个方案相同,不过在小圆点的实现,参考它们的多重复用性方案。就是用一个小圆点数组,在controller那里实现绑定每个gridview。

(2)自定义Textview的字体

我以前写过了。Android-自定义TextView(彩色字体与霓虹灯字体以及TextView的多项字体效果)

(3)手动控制圆和圆形进度条也写过啦。

Android-自定义view之圆(选择程度圆以及进度圆)

(4)圆形头像也是写过了。

Android-解析自定义view之圆形头像的各类方案

(5)卫星导航栏。

是以前项目移植过来的一个东西。很有趣的一个东西。重点是:重写relativelayout和用viewgroup实现自己的卫星布局。过段时间会针对这个写下文章。

(6)流式布局。鸿洋大大讲得很好

(7)水波纹。

嘻嘻,这个要求是往下兼容,我用自己思路实现了一个,虽然很多人做项目都是照搬v7包,然后直接往下兼容,可是这种自定义view的会给我们加深认识安卓的底层绘图机制,继承机制的理解呀。

核心是:使用监听事件,利用不断重绘,并且要不断地清理画布的数据,不然会oom的。那个波纹的效果其实就是不断地画圆形,还要计算点击的点,计算半径,然后传递事件给dispatchDraw,不断重绘。

(8)图片轮播,

这个很多人在开发的时候也是照搬第三方的库的,然而并不好,就不多说了。我们来讨论下它的核心思路:(具体看源码有详细的思路解释)
1.自定义viewpager和自定义viewpager的适配器,其中轮播器实现的:轮播器最重要的几个特点就是:自动滚动、手动滑动、滚动方向、每个Item显示时间。
2.在viewpager中实现的定时轮播,写个定时器去执行他;3.一个线程安全的播放方法,根据我们设置的向标记量去轮播(向左向右向上向下)。

(9)recyclerview,鸿洋大大的完美解释。

鸿洋大大的recyclerview

有能力的朋友,最好也把鸿洋大大的recyclerview封装也看了,我在项目中用了,阅读大大的思路真的真的很棒!!鸿洋大大的recyclerview封装

(10)接下来就是圆形菜单的,我基于鸿洋大大的一些思路根据实际需求做了一个限制级的圆形菜单。以前也解析过啦。 Android-自定义view之圆形与“半圆形”菜单


三、给出一些自定义view学习资源汇总:

初步接触自定义看的东西:首先要清楚为什么要自定义view,什么是自定义view啦。给出博客你看:

总的我们要三步骤:一、自定义控件;二、自定义布局;三、深研自定义机制。

1.基础一。

2.然后基础二。

3.了解大概后,接着你就要系统一下看看自定义有多少东西。启航的系列很详细

4.开始实现自己的自定义控件啦:三种自定义方式:扩展,组合,重写

5.自定义布局从LinearLayout谈起

6.在这过程中见识各个android大佬的自定义:搜下博客之星,前几的基本都是android的啦。

7.深入自定义机制:(从个别方法到事件传递机制)

(1)getWidth和getMeasuredwidth方法:http://blog.csdn.net/u011494050/article/details/39134161
http://blog.sina.com.cn/s/blog_6e519585010152s5.html
(2)LayoutParams:http://blog.csdn.net/liuhaomatou/article/details/22899925
(3)onTouchEvent和OnTouch区别:http://blog.csdn.net/huiguixian/article/details/22193977
(4)Invalidate和postInvalidate的区别:http://www.jianshu.com/p/457d74f443e2
(5)事件传递机制:http://blog.csdn.net/yanzi1225627/article/details/22592831

大致就是这个步骤啦。过程很艰辛,但果实很好吃。


四、给出我学习过程的自定义库咯。

喜欢的给下star或者fork咯,如果有朋友告诉我要写些特别点的控件,我会尽力写下,然后继续放到那个库中,给大家一起学习。

我的自定义学习库,github地址:辅助的自定义view系列

我会把自己写的学习的总结的自定义view更新给大家,一起学习!!喜欢的可以star或者fork下咯,也算对我的支持,哈哈,谢谢大家。

好了,Android-自定义View学习分享讲完了。本博客是博主这6个月学习安卓以来的自定义view部分,并在这里做出进一步拓展以及写出自己的理解。欢迎在下面指出错误,共同学习!

转载请注明:【JackFrost的博客】
更多内容,可以访问JackFrost的博客

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android-自定义View集合 的相关文章

  • 为什么 cordova.file.documentsDirectory 为空?

    我正在尝试使用 cordova plugin file transfer 在http ngcordova com docs plugins fileTransfer http ngcordova com docs plugins fileT
  • BLE 外设支持 Android-L 示例 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我希望有一个适用于 Android L 的 BLE 外设模式的示例 我的代码给了我奇怪的错误 即广告商太多 这没有任何意
  • 处理 Android 锁屏上的音量变化?

    我想做的是 能够在 android 4 4 上的锁屏上捕获音量增大 减小按钮操作 Google Cast 设计清单 https developers google com cast docs design checklist sender
  • Android Manifest 自动生成无效权限

    我不小心在 Android 清单中输入了无效的权限名称 并且无法将其删除 这是我的清单代码
  • 导航组件参数默认值

    在导航组件中 将参数从第一个片段发送到第二个片段时 默认值不会从导航图中获取哪个集合 这是我的代码 导航图 xml
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • Android Facebook sdk 3.5 分享对话框

    您好 我正在为 android sdk 3 5 实现 facebook 共享对话框 但是我按照指南没有取得任何成功 FacebookDialog shareDialog new FacebookDialog ShareDialogBuild
  • Android 中的 java.util.Observable 是线程安全的吗?

    Android 中的 java util Observable 是线程安全的吗 这文档 http developer android com reference java util Observable html说只有deleteObser
  • Android 5.0 Lollipop 中屏幕固定关闭时如何收到通知?

    我有一个在后台运行的应用程序 并在手机上发生特定事件时启动活动 我发现在 Android 5 0 中 当用户使用另一个应用程序打开屏幕固定时 startActivity intent 调用将被完全忽略 我的应用程序不知道该活动尚未启动 因此
  • ListView:防止视图回收

    我有一个使用回收视图的 ListView 我试图阻止视图被回收 所以我使用 setHasTransientState android support v4 view ViewCompatJB setHasTransientState Vie
  • 更改 Android 中的媒体音量?

    我可以更改媒体音量吗 如何 到目前为止我用过这个 setVolumeControlStream AudioManager STREAM MUSIC 但有一个搜索栏并且想要更改媒体音量 而不是铃声音量 那么有人可以告诉我如何更改媒体音量onC
  • Android:BATTERY_STATUS_DISCHARGING 和 BATTERY_STATUS_NOT_CHARGING 之间的区别

    我想知道这两个标志之间的区别 BatteryManager BATTERY STATUS DISCHARGING And BatteryManager BATTERY STATUS NOT CHARGING 我开发了一个使用这两个标志的应用
  • 我应该选择的最低 SDK 版本是多少? (截至2018年11月)

    据我所知 android studio 中默认的最小 SDK 设置是 15 我读到我应该增加它 因为没有多少人 或者可能没有 仍在使用该 android 版本 另外 我计划使用 android studio 中的一些新功能 这些功能仅适用于
  • Android - 多次实例化一个片段?

    我正在创建一个在 ListView 中显示数据的应用程序 数据分为两种类型 热门 收藏夹 我有一个活动和两个片段 片段根据类别显示项目列表 我为此使用了 ListView 然后我有两个fragment layouts 它们在设计上完全相同
  • 在 android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错

    我想显示弹出日期选择器并且我使用此代码 Calendar mcurrentDate Calendar getInstance int mYear mcurrentDate get Calendar YEAR int mMonth mcurr
  • 如何在 kotlin 中检查 lambda 空值

    在 Kotlin 中如何检查 lambda 是否为空 例如 我有这样的签名 onError Throwable gt Unit 我如何区分它的默认值是应用于主体还是应用于此函数的值 您无法测试 lambda 的主体是否为空 因此它不包含源代
  • 在片段之间切换时底部导航栏会向下推

    在我的活动中 我有一个底部导航栏和框架布局来显示片段 一切正常 但问题是当我开始按顺序从 1 4 移动时 底部导航栏保持在其位置 但当我突然从 4 跳到2 然后底部导航栏就会超出屏幕 当再次单击同一项目时 它就会回到正常位置 该视频将清楚地
  • Android 4.2 - Environment.getExternalStorageDirectory().getPath() 行为

    我一直在开发一个android应用程序 在上次更新到4 2之前 我使用 Environment getExternalStorageDirectory getPath 它返回了我 storage sdcard0 但自从更新后我现在得到了 s
  • 如何从灰度字节缓冲区图像创建位图?

    我正在尝试使用新的 Android 人脸检测移动视觉 API 来处理帧图像 所以我创建了自定义检测器来获取帧并尝试调用 getBitmap 方法 但它为空 所以我访问了帧的灰度数据 有没有办法从它或类似的图像持有者类创建位图 public
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且

随机推荐