Android | 您所在的位置:网站首页 › android手柄游戏 › Android |
控件已开源,gitee项目地址:https://gitee.com/y141111/RockerView 先看实现的功能,如不能满足需求,不必浪费宝贵的时间继续阅读 Android摇杆控件 功能实现的监听功能方向模式 用法准备工作八方向示例1).添加方向监听(方向发生改变触发)2).添加角度监听(角度发生改变触发)3).添加距离监听(距离发生改变触发) 四方向示例1).添加方向监听(方向发生改变触发)2).添加角度监听,角度发生改变触发3).添加距离监听(距离发生改变触发) 源代码 功能xml: java: class MainActivity : AppCompatActivity() { companion object { const val TAG = "MainActivity" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val mRockerViewXY = findViewById(R.id.rockerXY_View) // 1 val mRockerViewZ = findViewById(R.id.rockerZ_View) // 2 val directionXY_Text = findViewById(R.id.directionXY_Text) // 1当前方向 val angleXY_Text = findViewById(R.id.angleXY_Text) // 1当前角度 val levelXY_Text = findViewById(R.id.levelXY_Text) // 1当前偏移级别 val directionZ_Text = findViewById(R.id.directionZ_Text) // 2当前方向 val angleZ_Text = findViewById(R.id.angleZ_Text) // 2当前角度 val levelZ_Text = findViewById(R.id.levelZ_Text) // 2当前偏移级别 // 1 mRockerViewXY.setOnShakeListener(MyRockerView.DirectionMode.DIRECTION_8, object : MyRockerView.OnShakeListener { override fun onStart() {} override fun direction(direction: MyRockerView.Direction) { var directionXY = "" when (direction) { MyRockerView.Direction.DIRECTION_CENTER -> { directionXY = "当前方向:中心" angleXY_Text.text = "当前方向:" levelXY_Text.text = "当前偏移级别:" } MyRockerView.Direction.DIRECTION_DOWN -> { directionXY = "当前方向:下" } MyRockerView.Direction.DIRECTION_LEFT -> { directionXY = "当前方向:左" } MyRockerView.Direction.DIRECTION_UP -> { directionXY = "当前方向:上" } MyRockerView.Direction.DIRECTION_RIGHT -> { directionXY = "当前方向:右" } MyRockerView.Direction.DIRECTION_DOWN_LEFT -> { directionXY = "当前方向:左下" } MyRockerView.Direction.DIRECTION_DOWN_RIGHT -> { directionXY = "当前方向:右下" } MyRockerView.Direction.DIRECTION_UP_LEFT -> { directionXY = "当前方向:左上" } MyRockerView.Direction.DIRECTION_UP_RIGHT -> { directionXY = "当前方向:右上" } } Log.e(TAG, "XY轴$directionXY") Log.e(TAG, "-----------------------------------------------") directionXY_Text.text = directionXY } override fun onFinish() {} }) // 1 mRockerViewXY.setOnAngleChangeListener(object : MyRockerView.OnAngleChangeListener { override fun onStart() {} override fun angle(angle: Double) { var angleXY = "" angleXY = "当前角度:$angle" Log.e(TAG, "XY轴$angleXY") angleXY_Text.setText(angleXY) } override fun onFinish() {} }) // 1 mRockerViewXY.setOnDistanceLevelListener { level -> var levelXY = "" levelXY = "当前距离级别:$level" Log.e(TAG, "XY轴$levelXY") levelXY_Text.setText(levelXY) } // 2 mRockerViewZ.setOnShakeListener(MyRockerView.DirectionMode.DIRECTION_4_ROTATE_45, object : MyRockerView.OnShakeListener { override fun onStart() {} override fun direction(direction: MyRockerView.Direction) { var directionXY = "" when (direction) { MyRockerView.Direction.DIRECTION_CENTER -> { directionXY = "当前方向:中心" angleZ_Text.text = "当前方向:" levelZ_Text.text = "当前偏移级别:" } MyRockerView.Direction.DIRECTION_DOWN -> { directionXY = "当前方向:下" } MyRockerView.Direction.DIRECTION_LEFT -> { directionXY = "当前方向:左" } MyRockerView.Direction.DIRECTION_UP -> { directionXY = "当前方向:上" } MyRockerView.Direction.DIRECTION_RIGHT -> { directionXY = "当前方向:右" } else -> {} } Log.e(TAG, "XY轴$directionXY") Log.e(TAG, "-----------------------------------------------") directionZ_Text.text = directionXY } override fun onFinish() {} }) // 2 mRockerViewZ.setOnAngleChangeListener(object : MyRockerView.OnAngleChangeListener { override fun onStart() {} override fun angle(angle: Double) { var angleXY = "" angleXY = "当前角度:$angle" Log.e(TAG, "XY轴$angleXY") angleZ_Text.setText(angleXY) } override fun onFinish() {} }) // 2 mRockerViewZ.setOnDistanceLevelListener { level -> var levelXY = "" levelXY = "当前距离级别:$level" Log.e(TAG, "XY轴$levelXY") levelZ_Text.setText(levelXY) } } } 实现的监听功能1.摇杆方向监听 2.摇杆摇动角度监听 3.摇杆摇动距离监听 方向模式实现了摇杆的五中方向模式 DIRECTION_2_HORIZONTAL,// 横向 左右两个方向 DIRECTION_2_VERTICAL, // 纵向 上下两个方向 DIRECTION_4_ROTATE_0, // 四个方向 DIRECTION_4_ROTATE_45, // 四个方向 旋转45度 DIRECTION_8 // 八个方向 用法 准备工作1.在project的build.gradle中添加 allprojects { repositories { ... maven { url 'https://jitpack.io' } } }2.在module的build.gradle中添加 dependencies { implementation 'com.gitee.y141111:RockerView:1.0.0' }3.xml中添加 areaBackground 设置区域背景 rockerBackground 设置摇杆样式 rockerScale 设置摇杆的相对于背景的比例 rockerSpeedLevel 设置当前位置相对于中心点的距离的比例 rockerCallBackMode 有变化就回调,或者是方向改变才会回调 4.在Activity中添加 八方向示例 1).添加方向监听(方向发生改变触发) MyRockerView rockerView = binding.rockerView; rockerView.setOnShakeListener(MyRockerView.DirectionMode.DIRECTION_8, new MyRockerView.OnShakeListener() { @Override public void onStart() { } @Override public void direction(MyRockerView.Direction direction) { switch (direction){ case DIRECTION_CENTER: // 中心方向触发事件,一般归零 break; case DIRECTION_UP: // 上 触发事件 break; case DIRECTION_UP_RIGHT: // 上右 触发事件 break; case DIRECTION_RIGHT: break; case DIRECTION_DOWN_RIGHT: break; case DIRECTION_DOWN: break; case DIRECTION_DOWN_LEFT: break; case DIRECTION_LEFT: break; case DIRECTION_UP_LEFT: break; } } @Override public void onFinish() { } }); 2).添加角度监听(角度发生改变触发) rockerView.setOnAngleChangeListener(new MyRockerView.OnAngleChangeListener() { @Override public void onStart() { } @Override public void angle(double angle) { // 角度发生改变 触发事件 当前角度 angle } @Override public void onFinish() { } }); 3).添加距离监听(距离发生改变触发) rockerView.setOnDistanceLevelListener(new MyRockerView.OnDistanceLevelListener() { @Override public void onDistanceLevel(int level) { // 距中心点距离发生改变 触发事件 } }); 四方向示例旋转45度才是正常情况下使用的四方向 1).添加方向监听(方向发生改变触发) MyRockerView rockerView = binding.rockerView; rockerView.setOnShakeListener(MyRockerView.DirectionMode.DIRECTION_4_ROTATE_45, new MyRockerView.OnShakeListener() { @Override public void onStart() { } @Override public void direction(MyRockerView.Direction direction) { switch (direction){ case DIRECTION_CENTER: // 中心方向触发事件,一般归零 break; case DIRECTION_UP: // 上 触发事件 break; case DIRECTION_RIGHT: // 右 触发事件 break; case DIRECTION_DOWN: // 下 触发事件 break; case DIRECTION_LEFT: // 左 触发事件 break; } } @Override public void onFinish() { } }); 2).添加角度监听,角度发生改变触发 rockerView.setOnAngleChangeListener(new MyRockerView.OnAngleChangeListener() { @Override public void onStart() { } @Override public void angle(double angle) { // 角度发生改变 触发事件 当前角度 angle } @Override public void onFinish() { } }); 3).添加距离监听(距离发生改变触发) rockerView.setOnDistanceLevelListener(new MyRockerView.OnDistanceLevelListener() { @Override public void onDistanceLevel(int level) { // 距中心点距离发生改变 触发事件 } });角度和距离发生改变触发的是相同的监听事件 源代码控件已开源,gitee项目地址:https://gitee.com/y141111/RockerView |
CopyRight 2018-2019 实验室设备网 版权所有 |