android 手柄摇杆代码,android虚拟手柄摇杆的实现
最近的项目开发中的一个任务是实现Android虚拟手柄界面,如图所示:
界面是一个SurfaceView,摇杆和按键都是通过画图显示出来的,这里详细介摇杆的实现,当用户点击摇杆即中间的黄球时,然后可以再圆圈内移动,这里运用了三角函数的知识,我们可以把黄球的中心点为一个含有4个象限的坐标的中心,当黄球移动的位置超出了圆圈时,就让黄球的位置设置为相对于坐标中心同一角度圆圈的边缘的点上的位置。下面直接上代码:
private void handleTouchMoveEvent(int x, int y) {
if (found) {
handleTouchDownEvent();
mRect.left = x - mStickWidth/2;
mRect.top = y - mStickHeight/2;
mRect.right=mRect.left+mStickWidth;
mRect.bottom=mRect.top+mStickHeight;
//把摇杆的中心点作为基准坐标
int baseX = (int) mPosition[0]+ mStickWidth/2;
int baseY = (int) mPosition[1]+ mStickHeight/2;
//当超出圆形区域后摇杆显示的坐标点
int tX =mRect.left;
int tY =mRect.top;
//获取当前摇杆距离中心点的距离
double r = Math.sqrt(Math.pow((x-baseX),2)+Math.pow((y-baseY),2));
if(r!= 0 && r>maxLength){
double sin = Math.abs(y-baseY)/r;
double cos = Math.abs(x-baseX)/r;
//根据三角函数计算当摇杆超出圆形区域后在圆形区域边界显示的点的x轴和y轴分别距离中心点的距离
int xLength = (int) (maxLength * cos);
int yLength = (int) (maxLength * sin);
//当摇杆与中心点在同一x轴时的坐标
if(x==baseX && Math.abs(y-baseY)>maxLength){
if(y>baseY){
tY = baseY+maxLength;
}else{
tY = baseY-maxLength;
}
}
//当摇杆与中心点在同一y轴时的坐标
if(y==baseY && Math.abs(x-baseX)>150){
if(x>baseX){
tX = baseX+150;
}else{
tX = baseX-150;
}
}
//当摇杆在以中心点为轴心的第一象限的范围内时的坐标
if((x - baseX)>0 && (y-baseY)<0){
tX = baseX + xLength;
tY = baseY - yLength;
}
//当摇杆在以中心点为轴心的第二象限的范围内时的坐标
if((x - baseX)<0 && (y-baseY)<0){
tX = baseX - xLength;
tY = baseY - yLength;
}
//当摇杆在以中心点为轴心的第三象限的范围内时的坐标
if((x - baseX)<0 && (y-baseY)>0){
tX = baseX - xLength;
tY = baseY + yLength;
}
//当摇杆在以中心点为轴心的第四象限的范围内时的坐标
if((x - baseX)>0 && (y-baseY)>0){
tX = baseX + xLength;
tY = baseY + yLength;
}
mRect.left = tX - mStickWidth/2;
mRect.top = tY - mStickHeight/2;
mRect.right = mRect.left+mStickWidth;
mRect.bottom = mRect.top+mStickHeight;
}
updateValue(mRect.centerX(), mRect.centerY());
} else {
handleTouchUpEvent();
}
}
android 手柄摇杆代码,android虚拟手柄摇杆的实现相关推荐
- android小球移动代码,Android自定义圆形View实现小球跟随手指移动效果
本文实例为大家分享了Android实现小球跟随手指移动效果的具体代码,供大家参考,具体内容如下 一. 需求功能 手指在屏幕上滑动,红色的小球始终跟随手指移动. 实现的思路: 1)自定义View,在on ...
- android调频收音机代码,android 收音机 FM 驱动 hal层 框架层以及应用层代码
[实例简介] android 收音机 FM 驱动 hal层 框架层以及应用层代码 方法一 不需要framework部分 1.fm放到 \hardware\rk2x 2.FmRadio 放到 packa ...
- Android钢琴滑动代码,android 钢琴界面实现
近在做一个钢琴的东西,关于这个界面如何设计画了很长时间,主要是考虑到针对不同的分辨率,如果只针对一种分辨率的话用绝对布局可以实现,实现的基本思想是每个白色的键的位置是可以计算出来的,屏幕的宽度可以获得 ...
- android确认密码代码,Android自定义View实现验证码or密码输入框
前言 最近项目中有支付功能,用户输入密码时要类似微信支付密码输入框的样式,本想直接copy网上的,但设计姐姐总是对样式挑三拣四,抽空自己自定义了一个,无奈之下抽空自定义了个,并把它贴到GitHub上供 ...
- android相对布局代码,Android基础_3 Activity相对布局(示例代码)
相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的.相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,这些位置都是相对的,确定出了其中一个控件的位置就可以确定另一 ...
- android确认密码代码,Android手机卫士之确认密码对话框
本文接着实现"确认密码"功能,也即是用户以前设置过密码,现在只需要输入确认密码 布局文件和<Android 手机卫士--设置密码对话框>中的布局基本类似,所有copy一 ...
- android 图片切割代码,Android用clip剪切图像资源
使用clip剪切图像资源可以做进度条,图像慢慢展开的效果,他使用以下几个属性来控制效果: android:drawable:指定要剪切的原图像. android:clipOrientation:截取的 ...
- android退出app代码,Android应用退出代码各种方式
1. 点击按钮最小化app返回到home //并不会退出app,只是最小化 findViewById(R.id.button3).setOnClickListener(new OnClickListe ...
- android物理健代码,Android 物理按键整理及实例代码
先给大家看一段代码,然后说明. import android.app.Activity; import android.os.Bundle; import android.util.Log; impo ...
最新文章
- Description Resource Path Location Type Project configuration is not up-to-d
- python模块初始与time、datetime及random
- 最新最全产品删除页代码
- 如何找到SAP Fiori 应用里cache-control header是从后台何处设置的
- springboot项目打war包流程
- 汉字笔顺口诀_【小学语文知识】汉字书写笔顺口诀+书写规则
- [转]网易云音乐Android版使用的开源组件
- Sql Server的艺术(二) SQL复杂条件搜索
- JQUERY 使用键盘左右键切换选项卡
- 分享详细剪辑步骤,做自媒体一个月7852,全程复制粘贴即可
- FPGA--OV7725摄像头采集与VGA显示实验--1--OV7725使用与驱动协议
- 1378:最短路径(shopth)
- 抖音限流处理方法和封号原因
- 选择“正激”还是“反激”?这份宝典请收好~
- ubuntu挂载硬盘是什么意思
- 【网络信息安全】身份认证
- 攻克论文写作系列之5:你论文的“贡献”是什么?
- python实现骚操作,表白神技:整个朋友圈都是爱你的样子
- “评论实名制”,10月1日即将实施
- 国产源代码扫描工具DMSCA扫描出的报告优秀吗?