Path
自定义 View : Path 注意 Canvas.drawPath 无效, paint 没有设置 paint.setStyle(Style.STROKE) Path 介绍 Path 封装了由直线和曲线 (二次,三次贝塞尔曲线) 构成的几何路径。你能用 Canvas 中的 drawPath 来把这条路径画出来 (同样支持 Paint 的不同绘制模式),也可以用于剪裁画布和根据...
自定义 View : Path 注意 Canvas.drawPath 无效, paint 没有设置 paint.setStyle(Style.STROKE) Path 介绍 Path 封装了由直线和曲线 (二次,三次贝塞尔曲线) 构成的几何路径。你能用 Canvas 中的 drawPath 来把这条路径画出来 (同样支持 Paint 的不同绘制模式),也可以用于剪裁画布和根据...
自定义 View: Paint Paint 基础 Paint 即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色、样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法,大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。 Paint 的内部类 Paint.Cap Cap 指定了描边线和路径 (Path) 的开始和结束显示效果(线帽、笔触风格) 笔触风...
自定义 View: Canvas(画布) Canvas 是画布,我们通过 Canvas 的各种 drawXXX 方法将图形绘制到 Canvas 上面 Canvas 基础 坐标系 Canvas 绘图中牵扯到两种坐标系:Canvas 坐标系 (View 坐标系) 与 绘图坐标系 Canvas 坐标系(不变,左上角) Canvas 坐标系,也叫 View 坐标系。指的是 Canvas ...
Android View 体系 自定义 View 按需重写 onMeasure,适配 wrap_content 场景 重写 onDraw 绘制自己的东西 自定义 ViewGroup 按需重写 onMeasure,适配 wrap_content 场景 必须重写 onLayout 摆放子 view 按需重写 onDraw,需要设置 setWillNotDraw(...
EditText 设置 imeOptions 属性对软键盘的影响 将软键盘的 Enter 键更改为其他键,可以设置其 android:imeOptions 属性,这个属性可以控制软键盘的 Enter 键,以及横屏情况下的软键盘显示状态。 该设置必须是下面所列的值之一,或者是一个 “action…” 值加上一个 “flag…” 值的组合,在 action…组中设置多个值(例如,多个 “ac...
Android 中软键盘的显示调整 (windowSoftInputMode) 在 Android 中,可以通过给 Activity 设置 android:windowSoftInputMode 这个属性来控制软键盘与 Activity 的主窗口的交互方式。 windowSoftInputMode 小结 Activity 的主窗口与包含屏幕软键盘的窗口的交互方式,该属性的设置影响两个方...
小结 属性动画 isRunning 和 isStarted 区别? isStarted isStarted 将会返回 true 当我们调用 start 方法之后,如果调用了 end 或者 cancel 方法,此时 isStarted 返回 false;当我们调用 startDelay 方法将动画延时一定时间之后再执行,但是此时 isStarted 仍然返回 true。 ...
属性动画及 ValueAnimator 介绍 属性动画介绍 属性动画从 API11 开始提供,动画实现主要依靠 ValueAnimator 和 ObjectAnimator 两个类。其实还有一个 View.animate(),这个内部原理也是属性动画,而且它已经将常用的动画封装好了,使用起来很方便属性动画框架继承体系: Animator |--ValueAnimator // ...
属性动画原理 相关类 ObjectAnimator 和 ValueAnimator 及区别 ValueAnimator 类是先改变值,然后 手动赋值 给对象的属性从而实现动画;是 间接 对对象属性进行操作 ObjectAnimator 类是先改变值,然后 自动赋值 给对象的属性 (反射调用对象的 setter 方法,还是需要手动 invalidate() 等操作的) 从而实现...
ViewPropertyAnimator 使用 原始 ViewPropertyAnimator 需要手动 cancel 动画 mContentContainer.animate() .setDuration(5000L) .translationX(mContentContainer.width.toFloat()) .setListener(objec...