Android Shape 自定义图形汇总

1.简单介绍

  • 一个应用,应该保持一套统一的样式,包括Button、EditText、ProgressBar、Toast、Checkbox等各种控件的样式,还包括控件间隔、文字大小和颜色、阴影等等。web的样用css来定义,而android的样式主要则是通过shape、selector、 layer-list、level-list、style、theme等组合实现。
  • 我将用一系列文章,循序渐进地讲解样式的每个方面该如何实现。第一个要讲的就是shape,最基础的形状定义工具。

2.shape可以自定义四种类型的形状,通过android:shape属性指定

阅读更多

Android Selector 选择器总结

1.selector简单介绍

  • 实际应用中,很多地方比如按钮Button、Tab、ListItem等都是不同状态有不同的展示形状。
    • 举个例子,一个按钮的背景,默认时是一个形状,按下时是一个形状,不可操作时又是另一个形状。
    • 有时候,不同状态下改变的不只是背景、图片等,文字颜色也会相应改变。而要处理这些不同状态下展示什么的问题,就要用selector来实现。

2.selector创建方式

阅读更多

Android 动画源码解析

1.Animation和Animator区别

  • 对于 Animation 动画:
    • 实现机制是,在每次进行绘图的时候,通过对整块画布的矩阵进行变换,从而实现一种视图坐标的移动,但实际上其在 View内部真实的坐标位置及其他相关属性始终恒定.
  • 对于 Animator 动画:
    • Animator动画的实现机制说起来其实更加简单一点,因为他其实只是计算动画开启之后,结束之前,到某个时间点得时候,某个属性应该有的值,然后通过回调接口去设置具体值,其实 Animator 内部并没有针对某个 view 进行刷新,来实现动画的行为,动画的实现是在设置具体值的时候,方法内部自行调取的类似 invalidate 之类的方法实现的.也就是说,使用 Animator ,内部的属性发生了变化
阅读更多

Android 加载json动画

01.如何解析json动画

  • 如下所示,代码很简单

  • 在布局中

    1
    2
    3
    4
    5
    6
    7
    <com.airbnb.lottie.LottieAnimationView
    android:id="@+id/lottie_view"
    android:layout_width="400dp"
    android:layout_height="400dp"
    app:lottie_fileName="loading.json"
    app:lottie_loop="true"
    app:lottie_autoPlay="true"/>
阅读更多

Android 动画机制总结

1.Android动画类型

1.1 Android动画类型分类
  • 逐帧动画【Frame Animation】,即顺序播放事先做好的图像,跟电影类似
  • 补间动画【Tween Animation】,即通过对场景里的对象不断做图像变换 ( 平移、缩放、旋转 ) 产生动画效果
阅读更多

Android 自定义 ViewGroup

01.自定义ViewGroup步骤

  • 自定义ViewGroup
    • 自定义ViewGroup一般是利用现有的组件根据特定的布局方式来组成新的组件,大多继承自ViewGroup或各种Layout,包含有子View。
  • 大概的步骤如下所示
    • 1、创建类继承ViewGroup
    • 2、测量View
    • 3、布局View
    • 4、绘制View
    • 5、事件分发处理
阅读更多

Android 获取 View 宽高

01.获取View宽高的方式

1.1 onWindowFocusChanged

  • 如下所示

    1
    2
    3
    4
    5
    6
    7
    8
    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
    int width = view.getMeasuredWidth();
    int height = view.getMeasuredHeight();
    }
    }
阅读更多

Android 自定义 View 控件

01.自定义控件步骤

  • 根据Android Developers官网的介绍,自定义控件你需要以下的步骤。(根据你的需要,某些步骤可以省略)
    • 1、创建View
    • 2、处理View的布局
    • 3、绘制View
    • 4、与用户进行交互
    • 5、优化已定义的View
  • 上面列出的五项就是android官方给出的自定义控件的步骤。
    • 每个步骤里面又包括了很多细小的知识点。可以记住这五个点,并且了解每个点里包含的小知识点。再加上一些自定义控件的练习。不断的将这些知识熟练于心,相信我们每个人都能够定义出优秀的自定义控件。接下来我们开始对上面列出的5个要点进行细化解说。
阅读更多

Android View 之 invalidate,requestLayout,postInvalidate

01.requestLayout、invalidate与postInvalidate作用与区别

  • invalidate() postInvalidate()
    • 共同点:都是调用onDraw()方法,然后去达到重绘view的目的
    • 区别:invalidate()用于主线程,postInvalidate()用于子线程【通过handler发送消息,在handleMessage中((View) msg.obj).invalidate(),】
阅读更多

Android View 之 Canvas,Paint,Matrix,Rect 等介绍

1.Paint画笔介绍

  • Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。

1.1 图形绘制

  • 常用的方法有这些

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    * setARGB(int a,int r,int g,int b); 
    设置绘制的颜色,a代表透明度,r,g,b代表颜色值。
    * setAlpha(int a);
    设置绘制图形的透明度。
    * setColor(int color);
    设置绘制的颜色,使用颜色值来表示,该颜色值包括透明度和RGB颜色。
    * setAntiAlias(boolean aa);
    设置是否使用抗锯齿功能,会消耗较大资源,绘制图形速度会变慢。
    * setDither(boolean dither);
    设定是否使用图像抖动处理,会使绘制出来的图片颜色更加平滑和饱满,图像更加清晰
    * setFilterBitmap(boolean filter);
    如果该项设置为true,则图像在动画进行中会滤掉对Bitmap图像的优化操作,加快显示速度,本设置项依赖于dither和xfermode的设置
    * setMaskFilter(MaskFilter maskfilter);
    设置MaskFilter,可以用不同的MaskFilter实现滤镜的效果,如滤化,立体等
    * setColorFilter(ColorFilter colorfilter);
    设置颜色过滤器,可以在绘制颜色时实现不用颜色的变换效果
    * setPathEffect(PathEffect effect);
    设置绘制路径的效果,如点画线等
    * setShader(Shader shader);
    设置图像效果,使用Shader可以绘制出各种渐变效果
    * setShadowLayer(float radius ,float dx,float dy,int color);
    在图形下面设置阴影层,产生阴影效果,radius为阴影的角度,dx和dy为阴影在x轴和y轴上的距离,color为阴影的颜色
    * setStyle(Paint.Style style);
    设置画笔的样式,为FILL,FILL_AND_STROKE,或STROKE
    * setStrokeCap(Paint.Cap cap);
    当画笔样式为STROKE或FILL_AND_STROKE时,设置笔刷的图形样式,如圆形样式 Cap.ROUND,或方形样式Cap.SQUARE
    * setSrokeJoin(Paint.Join join);
    设置绘制时各图形的结合方式,如平滑效果等
    * setStrokeWidth(float width);
    当画笔样式为STROKE或FILL_AND_STROKE时,设置笔刷的粗细度
    * setXfermode(Xfermode xfermode);
    设置图形重叠时的处理方式,如合并,取交集或并集,经常用来制作橡皮的擦除效果
阅读更多