自定义view之路
Mars-xq
好记性不如烂笔头。
展开
-
RecyclerView 异步加载 乱序 问题的解决
参考: 郭霖 : Android ListView异步加载图片乱序问题,原因分析及解决方案方法一:1、 onCreateViewHolder 中获取 RecyclerView@Overridepublic TestHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); View vie原创 2021-11-02 12:07:45 · 1302 阅读 · 0 评论 -
canvas相关API
画布变换//旋转public void rotate(float degrees)public final void rotate(float degrees, float px, float py)//倾斜public void skew(float sx, float sy)//缩放public void scale(float sx, float sy)public final vo原创 2017-11-14 23:39:42 · 347 阅读 · 0 评论 -
onMeasure与onSizeChanged获取尺寸区别
自定义view如下:public class MyView extends View { private static final int DEFAULT_WIDTH = 100; private static final int DEFAULT_HEIGHT = 100; private Paint paint; private Rect rect; ...原创 2018-06-06 11:09:19 · 3272 阅读 · 0 评论 -
自定义view--进度
效果图:自定义view:import android.animation.FloatEvaluator;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import...原创 2018-06-06 16:16:10 · 195 阅读 · 0 评论 -
android 携程买票的起始点交换位置实现
效果图:点击交换位置按钮,北京和深圳布局交换位置。xml布局文件:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent...原创 2018-06-07 09:24:04 · 955 阅读 · 0 评论 -
点击EditText外隐藏输入框
推荐阅读:Android 判断当前点击位置是否在圆的内部 方法一: 重写dispatchTouchEvent,判断点击EditText之外则隐藏输入框。@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) {...原创 2018-05-31 10:43:25 · 636 阅读 · 0 评论 -
camera、Matrix概念
cameracamera的坐标系是左手坐标系。伸出左手,让拇指和食指成L形,大拇指向右,食指向上,中指指向前方,这样我们就建立了一个左手坐标系,拇指,食指,中指的指向分别代表了x,y,z轴的正方向。如下图所示:Camera的坐标系是左手坐标系。当手机平整的放在桌面上,X轴是手机的水平方向,Y轴是手机的竖直方向,Z轴是垂直于手机向里的那个方向。下面是一些细节点: 1,camera位于坐标点(0,0)原创 2017-08-17 14:41:48 · 1523 阅读 · 0 评论 -
android - 3D旋转
参考: camera、Matrix概念 Matrix的set,pre,post调用顺序常用的API如下: rotateX(float degree) 绕着x轴旋转degree个度数 rotateY(float degree) 绕着y轴旋转degree个度数 rotateZ(float degree) 绕着z轴旋转degree个度数 translat原创 2017-08-18 18:35:42 · 956 阅读 · 0 评论 -
Matrix的set,pre,post调用顺序
参考:Matrix的set,pre,post调用顺序Matrix主要用于对平面进行平移(Translate),缩放(Scale),旋转(Rotate)以及斜切(Skew)操作。 为简化矩阵变换,Android封装了一系列方法来进行矩阵变换;其中包括: set系列方法:setTranslate,setScale,setRotate,setSkew;设置,会覆盖之前的参数。 pre系列方法:pre原创 2017-08-17 11:59:25 · 640 阅读 · 0 评论 -
Android-LayoutInflater.inflate
获得 LayoutInflater 实例的三种方式//获得 LayoutInflater 实例的三种方式://三种方式本质是相同的,最终本质是都是调用的Context.getSystemService()。 LayoutInflater inflater1 = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFL原创 2017-05-09 16:24:56 · 285 阅读 · 0 评论 -
android手机屏幕分辨率尺寸
android获取设备屏幕大小的方法// 通过WindowManager获取DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);System.out.println("heigth : " + dm.heightPixels);System.out.pri原创 2017-02-13 18:11:36 · 488 阅读 · 0 评论 -
setStrokeWidth对自定义view的影响
自定义view:public class MyView extends View { private static final int DEFAULT_WIDTH = 100; private static final int DEFAULT_HEIGHT = 100; private Paint rectPaint; private Rect rect; ...原创 2018-06-15 15:31:34 · 910 阅读 · 0 评论 -
matrix与canvas、shader
Canvas与Matrix(matrix操作画布)public class Canvas { //用指定的矩阵【连接】当前矩阵。如果指定的矩阵为空,则此方法不执行任何操作。 //concat:合并数组,合并多个字符串 public void concat(@Nullable Matrix matrix) { if (matrix != null) native...原创 2019-03-12 09:44:17 · 419 阅读 · 0 评论 -
TypeEvaluator
一、系统内置的Evaluator:IntEvaluatorpublic class IntEvaluator implements TypeEvaluator<Integer> { public Integer evaluate(float fraction, Integer startValue, Integer endValue) { int startInt = star原创 2017-11-15 15:37:39 · 396 阅读 · 0 评论 -
根据进度算颜色值
调用第一步:获取当前进度的颜色:int gradient = getGradient(0.7f, Color.BLACK, Color.BLUE);//-16777038int evaluate = evaluate(0.7f, Color.BLACK, Color.BLUE);//-16777038int gradient = getGradient(0.3f, Color.parseCo原创 2017-11-15 11:35:15 · 638 阅读 · 0 评论 -
DecimalFormat
参考:Java DecimalFormat 用法将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化。DecimalFormat 类主要靠 # 和 0 两种占位符号来指定数字长度。 0 表示如果位数不足则以 0 填充,尾数部分最后一位四舍五入。# 表示只要有可能就把数字拉上这个位置。import java.text.Decim原创 2017-11-07 10:07:22 · 628 阅读 · 0 评论 -
Android-获取view的宽高
方式:方式1:监听,如setOnClickListener方式2:监听,如addOnGlobalLayoutListener方式3:view.post 或 view.postdelay方式4:onWindowFocusChanged方式5:示例:布局:<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://原创 2017-10-30 16:03:37 · 304 阅读 · 0 评论 -
自定义view-drawText
参考:自定义控件之绘图篇( 五):drawText()详解 博客笔记:自定义View之绘图(1)–drawText Android 自定义View-怎么绘制居中文本?drawText方法参数介绍:public void drawText(String text, float x, float y, Paint paint) y:所代表的是基线的位置 x:代表所要绘制文字所在矩形的相对位置。原创 2017-10-16 16:34:27 · 481 阅读 · 0 评论 -
自定义view单位的转化、状态保存等
//dp转pxint minWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 120, getContext().getResources().getDisplayMetrics());//sp转pxint minHeight = (int) TypedValue.applyDimension(TypedVa原创 2017-11-07 11:58:36 · 506 阅读 · 0 评论 -
自定义view:波浪
原理图:图中的矩形为手机屏幕。 通过属性动画类ValueAnimator不断改变点0的横坐标,随着点0横坐标向右移动,点1,点2,点3,点4,点5,以及四个控制点的坐标随着点0的移动同时位移相同距离,每一次坐标点更新,我们调用一次invalidate()方法,调用draw重新绘制视图,绘制四段贝塞尔曲线。最后点0移动一个波长到原先点2的位置,这样就完成了一次动画。 这样,通过循环不断的动画效果,原创 2017-10-24 16:51:45 · 382 阅读 · 0 评论 -
自定义view-构造方法和自定义属性
values/attrs.xml<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="CustomView"> <!--color--> <attr name="textColor" format="color" /> <!--dimension--原创 2017-10-13 17:23:16 · 469 阅读 · 0 评论 -
Android 抗锯齿的两种方式
出现锯齿条件:倾斜或旋转、快速变化。 当在屏幕上画一条直线时, 横竖不会出现锯齿, 但是当斜着画时, 就会出现锯齿的效果。方式一:通过画笔配置:paint.setAntiAlias(true); 方式二:通过画布配置:canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP原创 2017-11-10 10:40:22 · 4289 阅读 · 0 评论 -
Paint之setXfermode(图形混合模式)
PorterDuff.Mode表示混合模式,枚举值有18个,表示各种图形混合模式,有:Mode.CLEAR Mode.SRC Mode.DST Mode.SRC_OVER Mode.DST_OVER Mode.SRC_IN Mode.DST_IN Mode.SRC_OUT Mode.DST_OUT Mode.SRC_ATOP Mode.DST_ATOP M原创 2017-11-10 10:27:22 · 555 阅读 · 0 评论 -
Paint之setColorFilter(一)
矩阵乘法:简介在编程中有时候需要对图片做特殊的处理,比如将图片做出黑白的,或者老照片的效果,有时候还要对图片进行变换,以拉伸,扭曲等等。 这些效果在android中有很好的支持,通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果。颜色矩阵 android中可以通过颜色矩阵(ColorMatrix类)方面的操作颜色,颜色矩阵是一个5x4 的矩阵,如下原创 2017-11-10 15:27:25 · 343 阅读 · 0 评论 -
Paint之setColorFilter(二)
效果:mPaint.setColorFilter(new PorterDuffColorFilter(Color.RED, mode)); canvas.drawBitmap(srcBmp, width / 2, height / 2, mPaint);//源:蓝色矩形mPaint.setColorFilter(new PorterDuffColorFilter(Color.GREEN, mode原创 2017-11-10 16:00:36 · 367 阅读 · 0 评论 -
自定义view-onMeasure的理解
参考:Android自定义View(三、深入解析控件测量onMeasure)onMeasure方法是由父控件调用的,所有父控件都是ViewGroup的子类, ViewGroup是一个抽象类,它里面有一个抽象方法onLayout,这个方法的作用就是摆放它所有的子控件(安排位置), 因为是抽象类,不能直接new对象,所以我们在布局文件中可以使用View但是不能直接使用 ViewGroup。在给子控件原创 2017-10-26 09:10:41 · 530 阅读 · 0 评论 -
Math
参考: Android中Math类Math.floor()、Math.round()及Math.ceil()等方法的使用 android Math 用法大全 Java.lang.Math类1、Math.floor():Math.floor()表示向下取整:数值变小Math.floor(-1.1): -2.0Math.floor(-1.5): -2.0Math.floor(-1.6): -2.原创 2017-10-25 11:28:11 · 458 阅读 · 0 评论 -
canvas选区:ClipRect
canvas的选区:Op参数:DIFFERENCE //是第一次不同于第二次的部分显示出来REPLACE //是显示第二次的REVERSE_DIFFERENCE //是第二次不同于第一次的部分显示INTERSECT //交集显示UNION //全部显示XOR //补集 就是全集的减去交集生育部分显示注意:clipxx的作用,设置画布的显示区域,clipxx方法只对设置以后的drawxx起作原创 2017-11-14 14:13:24 · 912 阅读 · 0 评论 -
贝塞尔曲线简介
参考:Android-贝塞尔曲线 贝塞尔曲线扫盲动态绘制贝塞尔曲线的在线演示一阶贝塞尔曲线(线段):包含两个点:起点、终点, 其实就是lineTo的效果。二阶贝塞尔曲线(抛物线):包含三个点:起点A、一个控制点B、终点C长度关系为:AD / DB = BE / EC = DF / FE二阶曲线对应的方法是quadToPath mPath = new Path();mPath.moveTo(x0原创 2017-10-20 17:05:41 · 687 阅读 · 0 评论