Home

Awesome

<img src="http://ww3.sinaimg.cn/large/005Xtdi2gw1f4y9q9eql0j3074074jrm.jpg" width="32" /> Rocker

License

一个安卓虚拟摇杆程序,可作为游戏控制器或者小车遥控器。

作者微博: @GcsSloop

摘要

由于需要制作一个控制小车移动的应用,使用按键控制不太舒服,故制作了一个虚拟摇杆。 之前的摇杆程序只是满足了基本功能,还有很多不方便以及不合理的地方,本次对其进行了重构,使其结构更佳合理,也完善了之前不足的部分。

目前已完成内容:


使用示例

默认参数

<com.gcssloop.widget.RockerView
	android:id="@+id/rocker"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"/>
<img src="http://ww1.sinaimg.cn/large/005Xtdi2jw1f4y0d7x353j30dw0mot99.jpg" width="300" />

自定义参数

可自定义参数包括:

参数类型中文数据类型默认值简介
area_radius区域半径dimension75dp摇杆可活动区域的半径
rocker_radius摇杆半径dimension25dp摇杆本身半径
area_background区域背景color, referenceCYAN区域背景
rocker_background摇杆背景color, referenceRED摇杆背景
refresh_cycle刷新周期integer30ms界面刷新周期,默认30毫秒,每30ms就会刷新一次界面
callback_cycle回调周期integer100ms数据回调周期,默认100毫秒,每100ms就会发送一次界面状态回调

视图大小会根据 区域半径以及摇杆半径值自适应,一般使用 wrap_content 即可。

请在 layout 文件的根节点添加命名空间: xmlns:rocker="http://schemas.android.com/apk/res-auto"

<com.gcssloop.widget.RockerView
	android:id="@+id/rocker"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	rocker:area_background="@drawable/area_bg"
	rocker:area_radius="80dp"
	rocker:rocker_background="@drawable/rocker_bg"
	rocker:rocker_radius="30dp"/>
<img src="http://ww3.sinaimg.cn/large/005Xtdi2jw1f4y1bofuu5j30dw0mota1.jpg" width="300" />

监听回调

监听回调可监听到两个事件.

事件类型中文简介
EVENT_ACTION操作事件用户点击和滑动时会返回当前角度,当用户手指离开屏幕,返回 -1
EVENT_CLOCK时钟事件定时返回当前角度,如果没有任何操作,则返回 -1,默认每30ms返回一次
RockerView rocker = (RockerView) findViewById(R.id.rocker);
if (null != rocker){
    rocker.setListener(new RockerView.RockerListener() {

        @Override
        public void callback(int eventType, int currentAngle, float currentDistance) {
            switch (eventType) {
                case RockerView.EVENT_ACTION:
                    // 触摸事件回调
                    Log.e("EVENT_ACTION-------->", "angle="+currentAngle+" - distance"+currentDistance);
                    break;
                case RockerView.EVENT_CLOCK:
                    // 定时回调
                    Log.e("EVENT_CLOCK", "angle="+currentAngle+" - distance"+currentDistance);
                    break;
            }
        }
    });
}

PS:EVENT_CLOCK 是定时返回当前状态的,可以用 'callback_cycle' 来控制数据回调周期。

如何添加

Step 1. 添加JitPack仓库

在当前项目等根目录下的 build.gradle 文件中添加如下内容:

	allprojects {
		repositories {
			...
			maven { url "https://jitpack.io" }
		}
	}

Step 2. 添加项目依赖

	dependencies {
	        compile 'com.github.GcsSloop:Rocker:v1.1.1'
	}

:point_right:版本更新记录:point_left:

About Me

作者微博: @GcsSloop

<a href="http://www.gcssloop.com/info/about" target="_blank"> <img src="http://ww4.sinaimg.cn/large/005Xtdi2gw1f1qn89ihu3j315o0dwwjc.jpg" width="300" /> </a>

License

Copyright (c) 2016 GcsSloop

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.