在一些手机游戏中,玩家可以通过虚拟控制盘来控制游戏角色的行动。 无人机和玩具操控App中也有这一类控制盘的应用。
用自定义View的方式来实现类似手柄的控件。
相关代码请见 github.com/RustFisher/…
JoystickView特性
目前JoystickView特性如下
- 2种风格
- 固定控制盘;
- 浮动跟随模式;控制盘会移动到手指第一次点击的地方
- 可以在背景上添加“箭头”,即添加效果图片
- 自定义的“触摸球”图片和背景图片
- 手指移出了控制盘范围,仍然能够保持追随
- 能获取到移动位置的百分比参数
实现思路
用自定义View的方式实现这个控制盘。创建TouchView
。
控制盘的基本要求是跟随手指做出反应。为了获取到手指触屏的坐标,会用到View的onTouchEvent
方法。
控件中的“触摸球”和背景由图片得来。在自定义view中先获取相应的bitmap,缩放成指定的尺寸。
onTouchEvent
中获取到相应的坐标,计算出图片应该出现的位置;onDraw
中根据坐标进行绘制。 计算出手指位置与控制盘中心的距离等信息,通过listener传递出去。
代码示例
样式设定
有固定和浮动这两种风格,未来可能还会添加
public enum PadStyle {
FLOATING /* 随用户手指重新定位 */,
FIXED /* 固定位置 */
}
复制代码
控制盘配置
我们可以不直接操作TouchView
,创建TouchViewModel
存放相关的配置。
private int bgResId; // 背景图片资源ID
private int touchBmpResId;