自定义光标移动
来源:互联网 发布:ug8.5数控编程实例 编辑:程序博客网 时间:2024/05/21 08:48
自定的光标移动,实质是上在程序的顶层有一个透明的View,在Canvas上绘制光标
focus.9.png用一个9宫格的图
当某个View或者其他View 调用requestFocus()就会触发onFocusChanged,覆写该方法
在onDraw()方法中主要是获取到最顶层的View,然后调用该View去在当前view的可见区域绘制光标
此时光标View要做动画去改变“光标”位置,viewRect用来存上一次光标rect
在ondraw的改变canvans的位置将drawable绘制在canvas上,drawable的大小由动画决定
如果要加焦点动画需要定一个DrawableHolder
创建Animation,
createAnimation(Rect src,Recd dest)
利用PropertyValuesHolder,ObjectAnimator 创建动画,DrawableHolder的会保存每帧动画的数据。然后invalidate()就可以在ondraw
给Animation添加继承ValueAnimator.AnimatorUpdateListener不断绘制
focus.9.png用一个9宫格的图
当某个View或者其他View 调用requestFocus()就会触发onFocusChanged,覆写该方法
@Overrideprotected void onFocusChanged(boolean gainFocus, int direction,Rect previouslyFocusedRect) {if (gainFocus) { sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); if(isRequestFocused){ return; } isRequestFocused = true;} else { isClearFocus = true;} invalidate(); }
在onDraw()方法中主要是获取到最顶层的View,然后调用该View去在当前view的可见区域绘制光标
@Overrideprotected void onDraw(Canvas canvas) { super.onDraw(canvas); Context context = getContext(); if (context instanceof MainPageActivity) { //从Activity中获取光标View HighlightView highlightView = ((MainPageActivity) context).getHighlightView(); if (isRequestFocused) {//需要光标移动到该View Rect rect = new Rect(); if (this.getGlobalVisibleRect(rect)) { //绘制光标View highlightView.drawButtonHighlight(rect); isRequestFocused = false; } } else if(isClearFocus){//清除光标 highlightView.clearButtonHighlight(); isClearFocus = false; } }}
此时光标View要做动画去改变“光标”位置,viewRect用来存上一次光标rect
Rect highlightRect = new Rect(); //这个方法用于返回padding,这个padding其实表示的是控件的content的padding if (!highlightDrawable.getPadding(highlightRect)) { throw new IllegalStateException("Highlight drawable has to have padding");}
在ondraw的改变canvans的位置将drawable绘制在canvas上,drawable的大小由动画决定
@Overrideprotected void onDraw(Canvas canvas) { canvas.save(); canvas.translate(drawableHolder.getX(), drawableHolder.getY()); drawableHolder.getDrawable().draw(canvas); canvas.restore();}
如果要加焦点动画需要定一个DrawableHolder
public class DrawableHolder { private float x = 0, y = 0; private NinePatchDrawable drawable; //set() get() .....}
创建Animation,
createAnimation(Rect src,Recd dest)
利用PropertyValuesHolder,ObjectAnimator 创建动画,DrawableHolder的会保存每帧动画的数据。然后invalidate()就可以在ondraw
给Animation添加继承ValueAnimator.AnimatorUpdateListener不断绘制
public void onAnimationUpdate(ValueAnimator animation) { invalidate();}
- 自定义光标移动
- 光标移动
- 光标移动
- 光标移动
- 自定义光标
- Emacs光标移动命令
- emacs移动光标
- 光标移动的函数
- VIM -- 移动光标
- C# 光标移动
- textarea的光标移动
- 在EditText移动光标
- 文本框光标位置移动
- vi 快速移动光标
- vim 光标移动命令
- vim 光标移动笔记
- 【vim】 移动光标
- 移动光标到末尾
- java web项目不能编译
- Android中Textview显示带html文本-------【HTML标签】
- c#操作excel
- Android源码目录结构
- VC下Unicode 到UTF-8的转换
- 自定义光标移动
- POJ 1039 Pipe
- asp截字符串html
- 内核中的HZ 及延迟等
- Windows下MemCache多端口安装配置
- POCO C++库学习和分析 -- 线程 (四)
- ASP操作XML数据小结
- java中的异或非运算
- 【Android游戏开发之一】设置全屏以及绘画简单的图形