package com.xiao.example.project20190122.model;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.AsyncTask;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import com.xiao.example.project20190122.R;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
* Created by jinkia on 2016/9/30.
* 摇杆控件
*/
public class RockerView extends View {
private static final String TAG = "RockerView";
private static final int DEFAULT_SIZE = 400;
private static final float DEFAULT_ROCKER_SCALE = 1f;//默认半径为背景的1/2
private Paint mAreaBackgroundPaint;
private Paint mRockerPaint;
private Point mRockerPosition;
private Point mCenterPoint;
private int mAreaRadius;
private float mRockerScale;
private int mRockerRadius;
private CallBackMode mCallBackMode = CallBackMode.CALL_BACK_MODE_MOVE;
private OnAngleChangeListener mOnAngleChangeListener;
private OnShakeListener mOnShakeListener;
private OnDistanceLevelListener mOnDistanceLevelListener;
private DirectionMode mDirectionMode;
private Direction tempDirection = Direction.DIRECTION_CENTER;
private float lastDistance = 0;
private boolean hasCall = false;
private float baseDistance = 0;
private int mDistanceLevel = 10;//分成10分
// 角度
private static final double ANGLE_0 = 0;
private static final double ANGLE_360 = 360;
// 360°水平方向平分2份的边缘角度
private static final double ANGLE_HORIZONTAL_2D_OF_0P = 90;
private static final double ANGLE_HORIZONTAL_2D_OF_1P = 270;
// 360°垂直方向平分2份的边缘角度
private static final double ANGLE_VERTICAL_2D_OF_0P = 0;
private static final double ANGLE_VERTICAL_2D_OF_1P = 180;
// 360°平分4份的边缘角度
private static final double ANGLE_4D_OF_0P = 0;
private static final double ANGLE_4D_OF_1P = 90;
private static final double ANGLE_4D_OF_2P = 180;
private static final double ANGLE_4D_OF_3P = 270;
// 360°平分4份的边缘角度(旋转45度)
private static final double ANGLE_ROTATE45_4D_OF_0P = 45;
private static final double ANGLE_ROTATE45_4D_OF_1P = 135;
private static final double ANGLE_ROTATE45_4D_OF_2P = 225;
private static final double ANGLE_ROTATE45_4D_OF_3P = 315;
// 360°平分8份的边缘角度
private static final double ANGLE_8D_OF_0P = 22.5;
private static final double ANGLE_8D_OF_1P = 67.5;
private static final double ANGLE_8D_OF_2P = 112.5;
private static final double ANGLE_8D_OF_3P = 157.5;
private static final double ANGLE_8D_OF_4P = 202.5;
private static final double ANGLE_8D_OF_5P = 247.5;
private static final double ANGLE_8D_OF_6P = 292.5;
private static final double ANGLE_8D_OF_7P = 337.5;
// 摇杆可移动区域背景
private static final int AREA_BACKGROUND_MODE_PIC = 0;
private static final int AREA_BACKGROUND_MODE_COLOR = 1;
private static final int AREA_BACKGROUND_MODE_XML = 2;
private static final int AREA_BACKGROUND_MODE_DEFAULT = 3;
private int mAreaBackgroundMode = AREA_BACKGROUND_MODE_DEFAULT;
private Bitmap mAreaBitmap;
private int mAreaColor;
// 摇杆背景
private static final int ROCKER_BACKGROUND_MODE_PIC = 4;
private static final int ROCKER_BACKGROUND_MODE_COLOR = 5;
private static final int ROCKER_BACKGROUND_MODE_XML = 6;
private static final int ROCKER_BACKGROUND_MODE_DEFAULT = 7;
private int mRockerBackgroundMode = ROCKER_BACKGROUND_MODE_DEFAULT;
private Bitmap mRockerBitmap;
private int mRockerColor;
public RockerView(Context context, AttributeSet attrs) {
super(context, attrs);
// 获取自定义属性
initAttribute(context, attrs);
if (isInEditMode()) {
}
// 移动区域画笔
mAreaBackgroundPaint = new Paint();
mAreaBackgroundPaint.setAntiAlias(true);
// 摇杆画笔
mRockerPaint = new Paint();
mRockerPaint.setAntiAlias(true);
// 中心点
mCenterPoint = new Point();
// 摇杆位置
mRockerPosition = new Point();
}
/**
* 获取属性
*
* @param context context
* @param attrs attrs
*/
private void initAttribute(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RockerView);
// 可移动区域背景
Drawable areaBackground = typedArray.getDrawable(R.styleable.RockerView_areaBackground);
if (null != areaBackground) {
// 设置了背景
if (areaBackground instanceof BitmapDrawable) {
// 设置了一张图片
mAreaBitmap = ((BitmapDrawable) areaBackground).getBitmap();
mAreaBackgroundMode = AREA_BACKGROUND_MODE_PIC;
} else if (areaBackground instanceof GradientDrawable) {
// XML
mAreaBitmap = drawable2Bitmap(areaBackground);
mAreaBackgroundMode = AREA_BACKGROUND_MODE_XML;
} else if (areaBackground instanceof ColorDrawable) {
// 色值
mAreaColor = ((ColorDrawable) areaBackground).getColor();
mAreaBackgroundMode = AREA_BACKGROUND_MODE_COLOR;
} else {
// 其他形式
mAreaBackgroundMode = AREA_BACKGROUND_MODE_DEFAULT;
}
} else {
// 没有设置背景
mAreaBackgroundMode = AREA_BACKGROUND_MODE_DEFAULT;
}
// 摇杆背景
Drawable rockerBackground = typedArray.getDrawable(R.styleable.RockerView_rockerBackground);
if (null != rockerBackground) {
// 设置了摇杆背景
if (rockerBackground instanceof BitmapDrawable) {
// 图片
mRockerBitmap = ((BitmapDrawable) rockerBackground).getBitmap();
mRockerBackgroundMode = ROCKER_BACKGROUND_MODE_PIC;
} else if (rockerBackground instanceof GradientDrawable) {
// XML
mRockerBitmap = drawable2Bitmap(rockerBackground);
mRockerBackgroundMode = ROCKER_BACKGROUND_MODE_XML;
} else if (rockerBackground instanceof ColorDrawable) {
// 色值
mRockerColor = ((ColorDrawable) rockerBackground).getColor();
mRockerBackgroundMode = ROCKER_BACKGROUND_MODE_COLOR;
} else {
// 其他形式
mRockerBackgroundMode = ROCKER_BACKGROUND_MODE_DEFAULT;
}
} else {
// 没有设置摇杆背景
mRockerBackgroundMode = ROCKER_BACKGROUND_MODE_DEFAULT;
}
// 摇杆半径
mRockerScale = typedArray.getFloat(R.styleable.RockerView_rockerScale, DEFAULT_ROCKER_SCALE);
//距离级别
mDistanceLevel = typedArray.getInt(R.styleable.RockerView_rockerSpeedLevel, 10);
//回调模式
mCallBackMode = getCallBackMode(typedArray.getInt(R.styleable.RockerView_rockerCallBackMode, 0));
typedArray.recycle();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measureWidth, measureHeight;
int widthMode = MeasureSpec.getMode(widthMeasureSpec);
int he
没有合适的资源?快使用搜索试试~ 我知道了~
安卓项目,实现虚拟摇杆通过wifi串口发送nema-0183协议实现小吊舱方向控制
共48个文件
xml:18个
png:12个
java:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 141 浏览量
2024-05-01
20:44:17
上传
评论
收藏 233KB ZIP 举报
温馨提示
安卓项目,实现虚拟摇杆通过wifi串口发送nema-0183协议实现小吊舱方向控制 安卓项目,实现虚拟摇杆通过wifi串口发送nema-0183协议实现小吊舱方向控制
资源推荐
资源详情
资源评论
收起资源包目录
Project20190122-code.zip (48个子文件)
Project20190122-code
gradle.properties 728B
.DS_Store 6KB
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 200B
.gitattributes 96B
app
src
androidTest
java
com
xiao
example
project20190122
ExampleInstrumentedTest.java 748B
test
java
com
xiao
example
project20190122
ExampleUnitTest.java 752B
main
java
com
xiao
example
project20190122
model
RockerView.java 32KB
MainActivity.java 11KB
util
CheckCodeUtil.java 3KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
rocker.png 40KB
rocker_base.png 33KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
values
dimens.xml 211B
colors.xml 208B
strings.xml 77B
attrs.xml 948B
styles.xml 383B
layout
activity_main.xml 5KB
drawable
ic_launcher_background.xml 5KB
attrs.xml 1KB
AndroidManifest.xml 1KB
proguard-rules.pro 751B
build.gradle 937B
.gitignore 7B
gradlew.bat 2KB
build.gradle 546B
.idea
codeStyles
Project.xml 2KB
runConfigurations.xml 564B
vcs.xml 180B
misc.xml 2KB
gradle.xml 626B
encodings.xml 200B
settings.gradle 15B
gradlew 5KB
.gitignore 176B
共 48 条
- 1
资源评论
MarcoPage
- 粉丝: 2969
- 资源: 3005
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- unity控制对象移动.rar
- TortoiseSVN-1.14.3.29387-x64-svn-1.14.2
- jdk-8u411-macosx-aarch64.dmg
- docker安装.rar
- 美赛数学建模算法-使用Matlab实现常微分方程OridinaryDifferentialEquation-国赛-题解.zip
- FileUploadTestController.java
- 基于MATLAB的数字水印系统源码+GUI操作界面+全部数据资料+使用文档(高分课程设计).zip
- 美赛数学建模算法-使用Matlab实现非线性规划NonLinearProgramming-国赛-题解.zip
- linux安装java8环境资源包
- pcb问题和3D猴制作外壳.7z
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功