安卓UI
whoami_I
这个作者很懒,什么都没留下…
展开
-
安卓 垂直TextView
效果:代码:import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Rect;import android.text.TextPaint;import android.util.AttributeSet;import androidx.appcompat.widget.AppCompatTextView;pu原创 2021-02-05 17:46:02 · 222 阅读 · 0 评论 -
安卓 半透明画笔 重叠
默认情况下,画笔设置成半透明,当两段重叠的时候,就会有重叠部分加深的情况导致的原因是默认情况画笔的Xfermode为PorterDuff.Mode.SRC_OVER模式,改成PorterDuff.Mode.SRC模式就能使得重叠部分不加深别忘了要设置画笔的模式,一定要把禁止硬件加速,否则画笔的颜色可能就不对了...原创 2020-10-29 19:28:45 · 439 阅读 · 0 评论 -
startForeground如何去掉通知栏
在调用startForeground之后马上调用stopForeground(true);完整的就是这样:startForeground(1, new NotificationCompat.Builder(this, CHANNEL_ONE_ID).build());stopForeground(true);原创 2020-08-18 18:16:10 · 1544 阅读 · 9 评论 -
安卓动画(四)Recyclerview ItemAnimator(下)
这一篇就实现下面两种效果:实现之前,就是要对系统为我们实现的DefaultItemAnimator这个类进行改造,自己仿照写一个BaseItemAnimator,再在这个类的基础上,自定义我们自己的各种各样的动画,以add动画改造进行举例,DefaultItemAnimator中关于add动画有两个方法:animateAdd和animateAddImpl@Override public...原创 2020-01-05 16:38:45 · 289 阅读 · 0 评论 -
安卓动画(三)Recyclerview ItemAnimator(上)
前面讲了补间动画、Transition动画,属性动画,这一篇讲一讲和Recyclerview相关的动画。Recyclerview里面有一个类ItemAnimator专门用来管理每个item变化时所对应的动画,当item被删除、添加、位置发生变化时,相应的动画就会被调用,从而给用户更好的体验,这一篇就原理、流程做一个大概的介绍。由于ItemAnimator的流程还是比较复杂的,因为和recycl...原创 2020-01-05 14:58:21 · 687 阅读 · 0 评论 -
安卓动画(二)transition动画
本来此篇是想介绍属性动画的,但是属性动画还是比较简单,大致就是创建一个变化区间,然后监听屏幕的刷新,屏幕每刷新一次,就向主线程Looper中发送一个任务,用来设置属性的值。和前面补间动画最大的区别是补间动画是view层级的,在view绘制时,就会对view实行动画,而且补间动画只是view的影子,不是真正的view属性变化,并且补间动画继承的是Animation这个类。属性动画是真正的view属性...原创 2019-12-27 18:27:16 · 399 阅读 · 0 评论 -
安卓动画(一)补间动画
最近项目上要实现一个动画,不过这个动画做起来比较难,一是要跟随手势,另外涉及到多个view,不能通过简单的属性动画实现,目前思路应该可以用Scene动画实现,但是又要做到跟手这就比较麻烦了。不过还好这个需求不急,趁这段时间把动画的整个框架过一遍,挖一挖动画的实现代码,说不定写完这个系列,我那个问题自然而然就解决了。安卓动画主要分三种,补间动画、帧动画和属性动画,补间动画直接作用于view,也就是...原创 2019-12-19 21:49:59 · 174 阅读 · 0 评论 -
安卓手势处理(五)案例
系列文章:安卓手势处理(一)view的位置信息安卓手势处理(二) MotionEvent安卓手势处理(三)之实现图片的放大和缩小安卓手势处理(四)之Fling这一篇文章结合之前讲的内容实现一个案例,效果如下:上面的效果封装在了ZoomImageView中,demo地址:https://github.com/whoami-I/GestureZoomImageView主要功能有:...原创 2019-12-18 11:44:39 · 304 阅读 · 0 评论 -
安卓手势处理(四)之Fling
概述上一篇讲到了手势放大图片,当图片超出边缘的时候,我们需要进行滑动,滑动分为两个部分,一个是跟随手指的移动,另一个是手指离开时,view还会进行一个继续滑行的动作,称之为Fling。跟随手指的移动还是很简单的,就是根据手指移动多少,view就相应移动多少,fling相对就要麻烦一点,这一篇就来讲讲如何实现如丝般顺滑的Fling操作。首先我们想到的Fling肯定是使用动画来实现,其实还有更简单...原创 2019-12-13 14:22:12 · 1656 阅读 · 0 评论 -
java中的强引用、软引用、弱引用和虚引用区别
最近在项目中遇到了内存泄漏的问题,发现LeakCanary报出的引用链看不懂,没办法看不懂报出的错误就先研究一下源代码吧。通过查看LeakCanary的源代码发现这个东西的原理和弱引用有关系,之前也一直没搞懂软引用、弱引用和虚引用到底有什么卵用,今天算是真正看到了他们的用处了。引用的类型强引用:这个不用说了,一般我们都是使用这种引用的,只要一个对象有强引用那么jvm一定不会回收这个对象,如果内...原创 2019-12-10 09:55:09 · 229 阅读 · 0 评论 -
安卓手势处理(三)之实现图片的放大和缩小
这一篇来实现下面的效果:其实上面的效果可以用ScaleGestureDetector很容易实现,不过在这里我想自己动手实现一下这个简单的功能,然后在后面用GestureDetector来实现更全面的效果,并且封装成一个可支持手势放大缩小的Imageview。ImageView的缩小放大是基于Matrix的,这个类其实是一个矩阵,放大、缩小、位移、旋转其实就是矩阵变换操作。具体可以看这篇文章:...原创 2019-12-05 22:06:13 · 1112 阅读 · 0 评论 -
安卓手势处理(二) MotionEvent
上一篇文章确定了view的位置,这一篇就来讲一下view是如何分辨多个手指的点击事件。MotionEvent事件的信息就是封装在MotionEvent这个类之中的,包含事件类型(Action),手指id(pointerId),手指索引(index),事件发生的坐标信息(x,y)。获取事件坐标位置API:getX() //获取相对于该view显示区域左上角的位置xgetY() ...原创 2019-12-04 21:48:23 · 435 阅读 · 0 评论 -
安卓手势处理(一)view的位置信息
最近需要为项目加入手势处理,所以就有了这个系列,一来总结之前的知识,而来学习新东西,并记录之。view的位置信息由这么几个成员变量规定:mLeft mTop mRight mBottom 这四个变量规定了位于父view中的位置,分别表示距离父view 左上右下的距离。另外还有设置三个方向上偏离的距离方法:setTranslationX()setTranslationY()setTran...原创 2019-12-04 18:27:56 · 311 阅读 · 0 评论 -
CoordinatorLayout系列(五)例子
这一篇讲两个例子,实现如下效果;demo地址:https://github.com/whoami-I/CoordinatorLayoutExample第一个是ToolBar能跟随手指的上下滑动而产生渐变的效果,而不是默认的动画,默认效果是达到某个阈值之后,就执行一个动画把ToolBar变成绿色。实现起来也很简单,就是运用AppBarLayout的OnOffsetChangedListene...原创 2019-11-27 20:54:22 · 490 阅读 · 0 评论 -
CoordinatorLayout系列(四)CollapsingToolbarLayout
终于到CollapsingToolbarLayout这个强大而装逼的布局了,这个布局的实现和原理都是非常的简单,比如下面的效果:是不是很酷?当然这还是比较简单的,这仅仅是使用到了系统自带的一些功能,通过自定义可以实现更复杂的效果。demo地址:https://github.com/whoami-I/CoordinatorLayoutExample先讲实现的方式,再讲实现的过程。实现原理...原创 2019-11-27 11:19:30 · 826 阅读 · 0 评论 -
CoordinatorLayout系列(二)AppBarLayout
这一篇文章结合AppBarLayout来实现头部滑动的跟随。先看实际效果:上面就是实现了recyclerview和ToolBar的联动效果。其实要实现这个功能很简单,因为CoordinatorLayout和AppBarLayout将大部分功能实现了。布局文件:<?xml version="1.0" encoding="utf-8"?><androidx.coordi...原创 2019-11-24 15:18:57 · 753 阅读 · 0 评论 -
CoordinatorLayout系列(一):Behavior
CoordinatorLayout是google在Material Design上提出的一个布局样式,这个布局的主要功能就是实现一个view跟随另一个view变化,具体变化逻辑,由Behavior来实现,一个好的跟随效果可以展现出很酷的动画,因此这个系列就从Behavior入手,来剖析CoordinatorLayout的细节。一、使用方法首先摆出效果:功能就是实现一个球跟随另一个球移动,两...原创 2019-11-06 21:19:17 · 495 阅读 · 0 评论 -
Toolbar的使用
1、首先在配置文件中加入Toolbar控件<androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" an...原创 2019-11-04 22:03:05 · 475 阅读 · 0 评论 -
Recyclerview缓存机制分析
最近做项目的时候突然想到一个问题,就是在项目里面使用了多种ViewHolder,但是在onBindView这个方法中,RecyclerView是如何知道我在哪个位置需要的是哪种ViewHolder呢?就这个问题趁机看了一下源码,终于找到了答案,原来RecyclerView的缓存机制是区分type的,也就是Recyclerview.Adapter.getItemViewType()这个方法的返回值来...原创 2019-11-01 14:20:43 · 258 阅读 · 1 评论 -
安卓 ViewTreeObserver源码分析
今天在写程序时报了一个这样的错:This ViewTreeObserver is not alive, call getViewTreeObserver() again原因是我在Activity的onCreate方法中这样写的:ViewTreeObserver vto = recyclerview.getViewTreeObserver(); vto.addOnGlobal...原创 2019-10-29 20:43:39 · 1606 阅读 · 2 评论 -
安卓 ImagView的ScaleType
今天做一个应用加载图片,发现图片的位置没有占满整个ImageView,发现是ImageView的ScaleType属性没有设置,一般将ScaleType属性设置成centerCrop,关于ImageView的属性可以查看这篇文章:https://blog.csdn.net/u012702547/article/details/50586946/我们从源代码的角度来看,ImageView是在哪里...原创 2019-10-29 16:28:35 · 148 阅读 · 0 评论 -
如何设置安卓状态栏文字颜色
google原生的修改方式:<item name="android:windowLightStatusBar">true</item>只需要在主题中添加这个属性就可以将状态栏颜色变成黑色,设置为false颜色变白。不过这个属性在API23上才有用...原创 2019-10-18 09:45:53 · 672 阅读 · 0 评论 -
RelativeLayout动态设置边距、alignParent等属性
RelativeLayout有方法addRule可以动态设置alignParent、margin、控件相对位置的设置,比如需要设置childView右边距离RelativeLayout右边距为20dp:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns...原创 2019-07-24 15:53:38 · 5554 阅读 · 0 评论