自定义View-XLSeekBar
一. 前言系统的ProgressBar或者SeekBar本身不支持竖直布局,只有通过旋转的方式才可以达到效果。
Github地址:XLSeekBar
二. 自定义View1. 自定义用到的属性1234567891011121314151617181920212223242526272829303132333435//绘制背景的画笔private Paint paint_bg;//绘制进度的画笔private Paint paint_progress;//绘制圆点的画笔private Paint paint_thumb;//线条的粗细private int lineSize = 10;//背景线条的颜色private int lineColorBg = Color.BLACK;//进度线条以及圆点的颜色private int lineColorProgress = Color.MAGENTA;//控件样式:进度条 || 滑动条public static final int PROGRESS = 0;public static final int SLIDE = 1;private ...
算法分析设计-贪心算法
一. 前言贪心算法(Greedy Algorithm)贪心算法就是通过一系列局部最优选择得到整体问题的一个解的算法。但并不总是得到最优解。
重点是明白一个问题的贪心选择策略。
二. 切木材问题1.题目描述给一个长度为17的木材,可以切成小段卖出去,价格根据小段的长度不同而不同。
Length
i
1
2
3
4
5
6
7
8
9
10
Price
pi
1
4
5
7
10
17
17
20
24
30
如何通过切成小段卖出尽可能高的总价钱?
2.代码实现1234567891011121314151617181920212223public class RodPiece implements Comparable<RodPiece> { //木块的长度 int length; //木块对应的价值 int value; //构造方法 public RodPiece(int length, int value) { this.le ...
自定义View-画布快照
一. 前言1. 画布状态当前画布经过的一系列操作。
2. 状态栈存放画布状态和图层的栈(后进先出)。
3. 画布的构成由多个图层构成。
注意:在画布上操作 = 在图层上操作,如无设置,绘制操作和画布操作是默认在默认图层上进行。在通常情况下,使用默认图层就可满足需求;若需要绘制复杂的内容(如地图),则需使用更多的图层。最终显示的结果 = 所有图层叠在一起的效果。
二. 保存当前画布状态1. 作用保存画布状态(即保存画布的一系列操作)。
2. 应用场景画布的操作是不可逆的,而且会影响后续的步骤,假如需要回到之前画布的状态去进行下一次操作,就需要对画布的状态进行保存和回滚。
3. 具体使用1234567891011121314151617//方法1://保存全部状态public int save ()//方法2://根据saveFlags参数保存一部分状态//使用该参数可以只保存一部分状态,更加灵活public int save (int saveFlags)//saveFlags参数说明://1.ALL_SAVE_FLAG(默认):保存全部状态//2. CLIP_SAVE_FLAG:保 ...
自定义View-画布变换
一. 前言改变画布的性质,改变之后,任何的后续操作都会受到影响。
包括,平移,缩放,旋转,错切。
二. 平移1. 作用移动画布(实际上是移动坐标系)
2. 具体使用123//将画布原点向右移200px,向下移100px//注:位移是基于当前位置移动,而不是每次都是基于屏幕左上角的(0,0)点移动canvas.translate(200, 100)
三. 缩放1. 作用放大 / 缩小 画布的倍数。
2. 具体使用1234567//方法1//以(px,py)为中心,在x方向缩放sx倍,在y方向缩放sy倍,缩放中心默认为(0,0)public final void scale(float sx, float sy) //方法2//比方法1多了两个参数(px,py),用于控制缩放中心位置,缩放中心为(px,py)public final void scale (float sx, float sy, float px, float py)
1234567891011121314151617181920212223242526//实例:画两个对比图//相同:都有两个矩形,第1个 ...
自定义View-画布裁剪
一. 前言即从画布上裁剪一块区域,之后仅能编辑该区域。特别注意:其余的区域只是不能编辑,但是并没有消失。
二. 裁剪裁剪共分为:裁剪路径、裁剪矩形、裁剪区域。
1234567891011121314151617181920// 裁剪路径// 方法1public boolean clipPath(@NonNull Path path)// 方法2public boolean clipPath(@NonNull Path path, @NonNull Region.Op op)// 裁剪矩形// 方法1public boolean clipRect(int left, int top, int right, int bottom)// 方法2public boolean clipRect(float left, float top, float right, float bottom)// 方法3public boolean clipRect(float left, float top, float right, float bottom, @NonNull Regi ...
自定义View-绘制图片
一. 前言绘制图片分为:绘制矢量图(drawPicture)和 绘制位图(drawBitmap)。
二. 绘制矢量图1. 作用绘制矢量图的内容,即绘制存储在矢量图里某个时刻Canvas绘制内容的操作。
2. 应用场景① 相比于再次调用各种绘图API,使用Picture能节省操作 & 时间。
② 如果不手动调用,录制的内容不会显示在屏幕上,只是存储起来。
3. 使用步骤12345//开始录制public Canvas beginRecording(int width, int height)//结束录制public void endRecording()
123456789101112131415// 步骤1:创建Picture对象Picture mPicture = new Picture();// 步骤2:开始录制 返回一个CanvasmPicture.beginRecording(int width, int height);// 步骤3:绘制内容 or 操作Canvascanvas.drawCircle(500,500,400,mPaint);// ...(一系列操作) ...
自定义View-绘制基本图形
一. 前言绘制 点,线,矩形,圆角矩形,圆弧,圆,椭圆 等基本图形。
二. 绘制点1. 原理在某个坐标处绘制点,可以绘制一个点或者一组点。
2. 具体使用12345//绘制一个点public void drawPoint(float x, float y, @NonNull Paint paint) //绘制一组点public void drawPoints(@Size(multiple = 2) @NonNull float[] pts, @NonNull Paint paint)
12345678//在坐标(100,100)处绘制一个点canvas.drawPoint(100,100,paint1);//绘制一组点canvas.drawPoints(new float[]{ 300,100, 400,100,},paint2);
3. 注意绘制点(x , y)确定的是绘制出来的点的中心坐标,所以,有时候我们需要考虑绘制的点过大超出视图的范围。
三. 绘制线1. 原理两点(初始点 和 结束点)确定一条直线。
2. 具体使用 ...
自定义View-绘制颜色
一. 前言作用:将颜色填充整个画布,常用语绘制底色。
二. 绘制颜色123// 传入一个Color类的常量参数来设置画布颜色// 绘制蓝色canvas.drawColor(Color.BLUE);