Android高级UI
从AndroidUI显示原理,到高级自定义View,所涉及UI的东西
小小米乐
这个作者很懒,什么都没留下…
展开
-
Android Ui卡断的原因分析及常见的解决方式
Android 界面卡断就是响应不及时,动画不流程的主观感受,从Android 系统来讲就是无法保证每秒绘制出60帧的画面,也就是出现了掉帧现象。UI 卡顿的原因及解决方式过度绘制解决方法:1⃣️ 去除不必要的背景色、2⃣️布局视图扁平化、3⃣️减少透明色的使用UI线程的复杂运算(耗时操作)解决方法:减少UI线程中的数据运算(减少耗时操作如:网络请求等)频繁的GC解决方法:频繁GC的原因:1⃣️内存抖动、2⃣️瞬间产生大量的对象尽可能减少for循环中去new对象或再onDraw中创建对象等原创 2021-11-23 16:45:41 · 2866 阅读 · 0 评论 -
ListView小常识
一、一般我们继承Adapter后 我们都是这么重写getItemId的@Overridepublic long getItemId(int position){ return position;}如果listview 只是展示没有问题,如果有删除item的话最好f返回该数据的ID@Overridepublic long getItemId(int position){ return items.get(position).getId())(;}二、有时我们会发现我们修改了item布局原创 2020-11-25 14:50:53 · 261 阅读 · 0 评论 -
Android基础--ListView中的常用属性
ListView中的常用属性 android:scrollbars="vertical"//垂直的滚动条 android:fadeScrollbars="false"//设置滚动条在未使用是是否隐藏,当设置 android:fastScrollEnabled="true"//设置快速滚动条 android:fastScrollAlwaysVisi...原创 2019-10-30 17:51:25 · 832 阅读 · 0 评论 -
Android基础--ListView中的setSelection方法
ListView中的setSelection方法setSelection使用场景public void setSelection(int position)当聊天软件中出现很多消息的时候,会如下图顶端显示还有26条新消息,点击会跳转到最早的未读新消息的位置,这就是setSelection的使用场景setSelectionFromTop 与setSelection类似public voi...原创 2019-10-30 17:20:39 · 2229 阅读 · 0 评论 -
Android基础--ListView的常用事件回调 OnItemClickListener,OnItemLongClickListener,onScrollListener
OnItemClickListenerpublic interface OnItemClickListener { void onItemClick(AdapterView<?> parent, View view, int position, long id); }注意我们在点击单条item的时候,会去拿该item数据,我们一般是这么拿如下:Objec...原创 2019-10-30 17:07:47 · 1127 阅读 · 0 评论 -
Android基础--ListView中的HeaderView、FooterView、EmptyView
HeaderViewHeaderView的使用场景如图:如何添加HeaderView headerView = LayoutInflater.from(MainActivity.this).inflate(R.layout.header_view,listView, false); listView.addHeaderView(headerView);//添加header...原创 2019-10-30 16:22:07 · 1007 阅读 · 0 评论 -
Android基础--ListView的刷新
ListView的刷新全局刷新一、修改数据源二、adapter.notifyDataSetChanged()修改数据源必须在UI线程操作,修改完必须调用notifyDataSetChanged,负责会发生异常局部刷新ListView中某个item的内容被修改,只需要找到该item进行刷新即可private void partialRefresh(ListView listView,i...原创 2019-10-30 11:54:50 · 2656 阅读 · 0 评论 -
Android基础--ListView的复用机制
RecycleBin 机制RecycleBin 缓存机制如图:RecycleBin 代码实现:其实就是BaseAdapter中的getView方法的第二个参数convertView复用代码如下:这是两种样式的item的复用@Override public View getView(int position, View convertView, ViewGroup viewGroup...原创 2019-10-30 11:32:48 · 1044 阅读 · 0 评论 -
Android基础--ListView(一)
ListView最主要的功能是展示数据listview的简单使用ListView 与数据直接需要一个adapter来适配关系图如下:有来adapter就可以减少listview与数据直接的耦合度ListView中的setAdapter方法中需要设置的是ListAdapterpublic void setAdapter(ListAdapter adapter)ListAdapter...原创 2019-10-29 11:58:09 · 745 阅读 · 0 评论 -
Android自定义View--模仿支付宝支付密码框,自定义密码输入框
按照惯例先上效果图:⚠️分析:一、需要调用输入数字输入框二、对输入框的监控三、画圆角的矩形四、画分割线五、画密码的原点思路:EditText符合前两个需求,但是我们不想显示输入内容与默认的密码样式。所以我们可以自定义View继承EdiText。来实现下面三种需求。一、我们只需要EditText调用数字输入框和对文字的监控特性即可,其他的我们自定义 android:inputT...原创 2019-07-08 15:14:07 · 2342 阅读 · 0 评论 -
Android自定义View--QQ未读消息气泡拖拽黏连效果
QQ聊天界面好友来信息会有一个气泡显示多少条信息,如不看也可以拖拽让其消失。效果如下:分析:动画组成部分如下图⚠️重点一、动画由三个部分组成 不动圆、可动圆、粘连部分(AB与CD是两个贝塞尔曲线)二、不动圆圆心e固定不动(可知) 可动圆圆心f就是手指滑动位置(可知)三、可拖拽的最大距离我们这里设置 可动圆半径的8倍四、不动圆的半径随着 可动圆 与 不动圆 距离变化而变化(...原创 2019-07-04 20:57:44 · 1805 阅读 · 0 评论 -
Android UI Material Design交互设计(六)--CoordinatorLayout之精髓Behavior 自定义Behavior
Material Design 交互设计在Android上的应用,Design Support Library 是在2015年Google官方发布的一个全新兼容函数库,它使得开发这可以在Android2.1(API7)及以上的设备中实现交互设计的效果。这个函数库提供了一些了的控件,主要包括:Snackbar、NavigationView、FloatingActionButton、TextI...原创 2019-07-04 15:26:01 · 433 阅读 · 0 评论 -
Android UI Material Design交互设计(五)--CollapsingToolbarLayout 折叠布局
Material Design 交互设计在Android上的应用,Design Support Library 是在2015年Google官方发布的一个全新兼容函数库,它使得开发这可以在Android2.1(API7)及以上的设备中实现交互设计的效果。这个函数库提供了一些了的控件,主要包括:Snackbar、NavigationView、FloatingActionButton、TextI...原创 2019-07-04 11:53:39 · 412 阅读 · 0 评论 -
Android UI Material Design交互设计(四)--AppBarLayout 与Toolbar结合
Material Design 交互设计在Android上的应用,Design Support Library 是在2015年Google官方发布的一个全新兼容函数库,它使得开发这可以在Android2.1(API7)及以上的设备中实现交互设计的效果。这个函数库提供了一些了的控件,主要包括:Snackbar、NavigationView、FloatingActionButton、TextI...原创 2019-07-03 16:44:59 · 466 阅读 · 0 评论 -
Android UI Material Design交互设计(三)--SnackBar 详解
Material Design 交互设计在Android上的应用,Design Support Library 是在2015年Google官方发布的一个全新兼容函数库,它使得开发这可以在Android2.1(API7)及以上的设备中实现交互设计的效果。这个函数库提供了一些了的控件,主要包括:Snackbar、NavigationView、FloatingActionButton、TextI...原创 2019-07-03 14:40:14 · 457 阅读 · 0 评论 -
Android自定义View,跟随手指滑动效果
Android自定义View,实现跟随手指滑动效果,效果如下:一,重写onTouchEvent方法 最后返回true二,在MotionEvent.ACTION_MOVE情况下改变自定义view 的位置代码如下:public class FollowView extends TextView { private Context context; private floa...原创 2019-06-24 11:43:23 · 4816 阅读 · 5 评论 -
Android UI Material Design交互设计(二)--Toolbar的基本使用与样式修改
Toolbar 是在 Android 5.0 开始推出的一个 Material Design 风格的导航控件。作为替代ActionBar新的头部标题控件,他有什么优势呢: 更灵活的自定义属性效果一:实现一: 布局<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:la...原创 2019-06-21 11:16:51 · 454 阅读 · 0 评论 -
Android UI Material Design交互设计(一)--BottomNavigationView底部菜单
这个转GIF工具出了点问题原创 2019-06-13 15:22:51 · 468 阅读 · 0 评论 -
Android自定义View基础--事件分发
从上图可以看出一个Activity的根View是DecorView,DecorView继承了FrameLayout,而FrameLayout 继承了ViewGroup。所以我们搞明白ViewGroup与View的事件分发逻辑,及其dispatchTouchEvent与onInterceptTouchEvent还有onTouchEvent,其中onInterceptTouchEvent是View...原创 2019-06-10 16:10:37 · 259 阅读 · 0 评论 -
Android屏幕适配(三)--刘海屏适配
刘海屏针对不同手机需要做不同的适配各个手机都提供相应的方案:其他手机厂商(华为,小米,oppo vivo)适配华为:https://devcenter-test.huawei.com/consumer/cn/devservice/doc/50114小米:https://dev.mi.com/console/doc/detail?pId=1293Oppo:https://open.oppo...原创 2019-06-10 10:23:48 · 855 阅读 · 0 评论 -
Android屏幕适配(二)--像素密度
通过修改像素密度来实现不同手机,不同像素密度的屏幕的适配名词density : 表示屏幕的密度 计算公式:density = dpi / 160意思就是没英寸如果是160px 那么density = 160/160 = 1 。如果是320 density = 320/160 = 2 以此类推:每英寸像素是120,160,240,320,480,对应的密度是0.75 1 1.5 2 3s...原创 2019-06-08 23:28:46 · 496 阅读 · 0 评论 -
Android屏幕适配(一)--自定义View屏幕适配
为什么要屏幕适配同一个界面需要在不同尺寸的屏幕上显示,即使屏幕的尺寸一样,密度也可能不一样。导致App的界面元素在不同屏幕尺寸上显示不一致。所以我们让布局,布局组件,资源,用户界面流程,匹配不同屏幕尺寸。屏幕适配常见方式布局适配避免写死控件尺寸,使用wrap_content, match_parentLinearLayout xxx:layout_weight=“0.5” //线性布局...原创 2019-06-07 18:04:39 · 1294 阅读 · 0 评论 -
Android自定义View基础--PathMeasure 实现Loading动画
每次我觉得学一个知识点都是很枯燥的,为了更好,更快的学习一个知识点,就是先告诉大家这个知识点能实现什么?所以我一般情况下先用最简单的demo给大家展示效果。按照惯例先上动图直接上代码代码中注释很详细public class PathMeasureView extends View { private Paint mPaint = new Paint(); priva...原创 2019-06-05 17:28:09 · 284 阅读 · 0 评论 -
Android自定义View--刮刮卡效果
我最近悟出了一个道理:“学习感觉时间过的很慢,玩游戏感觉时间过的很快,因为学习让我度日如年啊!想要活的长的话要多学习···不光如此,学习还治好了我的失眠症,我看书一会就瞌睡了。” 所以:学习是个好东西。按照惯例先上效果...原创 2019-06-05 11:10:22 · 253 阅读 · 0 评论 -
Android自定义View基础--Paint设置PorterDuffXfermode图形混合模式实现遮罩效果,例如头像展示
先上效果利用Android–Paint设置PorterDuffXfermode图形混合模式实现遮罩效果通过自定义View重写onDraw方法来用Paint实现遮罩效果,我们之间上代码,代码有注释,全部代码如下可以之间运行public class MaskView extends View { private Paint paint; private Bitmap bitma...原创 2019-06-04 17:38:22 · 543 阅读 · 0 评论 -
Android自定义View基础--Paint画笔设置样式
Android中画笔设置样式的时候发现有三种有样式如下Paint.Style.STROKE; //描边Paint.Style.FILL; //填充Paint.Style.FILL_AND_STROKE;//描边加填充展示效果如下途中对应的样式:STROKEFILLFILL_AND_STROKE图中第二张与第三张看着一样,其实第三张比第二张大了一圈描边 。...原创 2019-06-03 14:35:31 · 1267 阅读 · 0 评论 -
Android自定义View基础--Canvas常用api
标题Canvas常用APIpublic void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)在指定坐标绘制位图public void drawLine(float startX, float startY, float stopX, float stopY,Paint paint)根据给定的起始点和结束点之间...原创 2019-06-02 15:35:29 · 158 阅读 · 0 评论 -
Android自定义View基础--Paint画笔设置颜色过滤器
Android–Paint画笔设置颜色过滤器/* * LightingColorFilter(0xffffff,0x003000); * 第一个参数是去除照片中的某个颜色 * 第二个参数是增加颜色更亮 * 下面代码是绿色更亮 * */ LightingColorFilter lighting = ne...原创 2019-06-01 22:03:00 · 1078 阅读 · 0 评论 -
Android自定义View基础--Paint画笔设置图形渲染器
线性渲染/** * 1.线性渲染,LinearGradient(float x0, float y0, float x1, float y1, @NonNull @ColorInt int colors[], @Nullable float positions[], @NonNull TileMode tile) * (x0,y0):渐变起始点坐标 ...原创 2019-06-01 15:38:26 · 281 阅读 · 0 评论 -
Android自定义View基础--Paint画笔
概念画笔,保存了绘制几何图形、文本和位图的样式和颜色信息常用APImPaint = new Paint();//初始化mPaint.setColor(Color.RED);//设置颜色mPaint.setARGB(255,255,255,0);//设置Paint对象颜色,范围为0~255mPaint.setAlpha(200);//设置Alpha不透明度,范围为0~255mPaint...原创 2019-06-01 15:22:13 · 160 阅读 · 0 评论 -
Android UI绘制流程及原理 二
上一篇文章主要介绍了Activity的结构这一篇开始介绍view的绘制流程View#requestLayout()ViewGroup#requestLayout()ViewRootImpl#requestLayout()ViewRootImpl#scheduleTraversals()ViewRootImpl#doTraversal()ViewRootImpl...原创 2019-05-31 22:32:00 · 220 阅读 · 0 评论 -
Android UI绘制流程及原理 一
我们分析的入口:setContentView(R.layout.activity_main);点击进入setContentViewpublic void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar(); }点击进...原创 2019-05-31 21:47:33 · 370 阅读 · 0 评论