本文出处:http://blog.csdn.net/sk719887916/article/details/40348853,作者:skay
阅读此文建议先阅读 安卓Tv开发(二)移动智能电视之焦点控制(按键事件)
接触TV的的开发,操作体验是我们开发者必须要关注的,因此,遥控器做鼠标成了智能设备的开发主流不可缺少的一部分,今天给大家带来怎样实现遥控操作模拟鼠标的功能,觉得ok的请到下方自觉的点个赞。有自动化测试框架也有用此方式实现的。
实现功能: 遥控器方向键控制鼠标箭头移动
遥控器可以操作模拟鼠标进行点击操作。
效果图:
实现之前先做个大致分析,记得之前我在一篇安卓实现高仿Ios桌面的博客中就接触过类似此需求的功能,第一眼大家觉得可拖动gridview和实现遥控器拖动鼠标有啥关系,仔细一分析,其实异曲同工,可拖动的gridView我们是用手指进行item移动的,而这次的模拟鼠标我们可以把它想成一个item(只不过展现的UI为一个鼠标箭头的图片),用遥控器进行控制的,当然我们无需拖动,用遥控方向键来控制item的位移即可。至于遥控器点击OK键进行点击执行点击操作的事件,我们可以获取模拟鼠标在屏幕中的绝对坐标,然后模拟一个此处的点击事件即可。
一 自定义鼠标视图
用于展现鼠标的具体视图,MouseView 继承 FrameLayout ,之后漂浮在控制的activity上,只要由WindowManage控制此视图的展现和移动。
public MouseView(Context context) {
super(context);
}
public MouseView(Context context, MouseManager mMouseMrg) {
super(context);
init( mMouseMrg);
}
public OnMouseListener getOnMouseListener() {
return mOnMouseListener;
}
public void setOnMouseListener(OnMouseListener mOnMouseListener) {
this.mOnMouseListener = mOnMouseListener;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mMouseView != null && mMouseBitmap != null) {
mMouseView.measure(MeasureSpec.makeMeasureSpec(mMouseBitmap.getWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(mMouseBitmap.getHeight(), MeasureSpec.EXACTLY));
}
}
private void init(MouseManager manager) {
mMouseManager = manager;
Drawable drawable = getResources().getDrawable(
R.drawable.shubiao);
mMouseBitmap = drawableToBitamp(drawable);
mMouseView = new ImageView(getContext());
mMouseView.setImageBitmap(mMouseBitmap);
addView(mMouseView, new LayoutP