mirror of
https://github.com/ZCShou/GoGoGo.git
synced 2026-06-13 21:00:55 +08:00
代码优化
This commit is contained in:
parent
27a0e01f51
commit
db4b08068b
@ -6,8 +6,8 @@ android {
|
||||
applicationId "com.zcshou.gogogo"
|
||||
minSdkVersion 27
|
||||
targetSdkVersion 29
|
||||
versionCode 130
|
||||
versionName '1.3.0'
|
||||
versionCode 131
|
||||
versionName '1.3.1'
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
ndkVersion '22.1.7171670'
|
||||
|
||||
Binary file not shown.
@ -10,8 +10,8 @@
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"versionCode": 130,
|
||||
"versionName": "1.3.0",
|
||||
"versionCode": 131,
|
||||
"versionName": "1.3.1",
|
||||
"outputFile": "app-release.apk"
|
||||
}
|
||||
]
|
||||
|
||||
@ -7,9 +7,6 @@ import android.os.Vibrator;
|
||||
|
||||
import com.baidu.mapapi.SDKInitializer;
|
||||
import com.google.android.gms.ads.MobileAds;
|
||||
import com.google.android.gms.ads.initialization.InitializationStatus;
|
||||
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
|
||||
|
||||
|
||||
@SuppressLint("Registered")
|
||||
public class GoApplication extends Application {
|
||||
|
||||
@ -1,455 +1,427 @@
|
||||
package com.zcshou.joystick;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.zcshou.gogogo.R;
|
||||
|
||||
public class ButtonView extends LinearLayout {
|
||||
|
||||
private ButtonViewClickListener mListener;
|
||||
boolean isCenter;
|
||||
ImageButton btnCenter;
|
||||
boolean isNorth;
|
||||
ImageButton btnNorth;
|
||||
boolean isSouth;
|
||||
ImageButton btnSouth;
|
||||
boolean isWest;
|
||||
ImageButton btnWest;
|
||||
boolean isEast;
|
||||
ImageButton btnEast;
|
||||
boolean isEastNorth;
|
||||
ImageButton btnEastNorth;
|
||||
boolean isEastSouth;
|
||||
ImageButton btnEastSouth;
|
||||
boolean isWestNorth;
|
||||
ImageButton btnWestNorth;
|
||||
boolean isWestSouth;
|
||||
ImageButton btnWestSouth;
|
||||
|
||||
public ButtonView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
LayoutInflater.from(context).inflate(R.layout.joystick_button, this);
|
||||
|
||||
initButtonView();
|
||||
}
|
||||
|
||||
public ButtonView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
LayoutInflater.from(context).inflate(R.layout.joystick_button, this);
|
||||
initButtonView();
|
||||
}
|
||||
|
||||
public ButtonView(Context context) {
|
||||
super(context);
|
||||
|
||||
LayoutInflater.from(context).inflate(R.layout.joystick_button, this);
|
||||
|
||||
initButtonView();
|
||||
}
|
||||
|
||||
private void initButtonView() {
|
||||
isCenter = false;
|
||||
btnCenter = findViewById(R.id.btn_center);
|
||||
btnCenter.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (!isCenter) {
|
||||
isCenter = true;
|
||||
btnCenter.setImageResource(R.drawable.ic_lock_close);
|
||||
} else {
|
||||
isCenter = false;
|
||||
btnCenter.setImageResource(R.drawable.ic_lock_open);
|
||||
|
||||
if (isNorth) {
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
}
|
||||
if (isSouth) {
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
}
|
||||
if (isWest) {
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
}
|
||||
if (isEast) {
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
}
|
||||
if (isEastNorth) {
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
}
|
||||
if (isEastSouth) {
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
}
|
||||
if (isWestNorth) {
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
}
|
||||
if (isWestSouth) {
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
}
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isNorth = false;
|
||||
btnNorth = findViewById(R.id.btn_north);
|
||||
btnNorth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isNorth) {
|
||||
isNorth = true;
|
||||
btnNorth.setImageResource(R.drawable.ic_up_pressed);
|
||||
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,90, 1);
|
||||
}
|
||||
} else {
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,90, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,90, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isSouth = false;
|
||||
btnSouth = findViewById(R.id.btn_south);
|
||||
btnSouth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isSouth) {
|
||||
isSouth = true;
|
||||
btnSouth.setImageResource(R.drawable.ic_down_pressed);
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,270, 1);
|
||||
}
|
||||
} else {
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,270, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,270, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWest = false;
|
||||
btnWest = findViewById(R.id.btn_west);
|
||||
btnWest.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isWest) {
|
||||
isWest = true;
|
||||
btnWest.setImageResource(R.drawable.ic_left_pressed);
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,180, 1);
|
||||
}
|
||||
} else {
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,180, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,180, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isEast = false;
|
||||
btnEast = findViewById(R.id.btn_east);
|
||||
btnEast.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isEast) {
|
||||
isEast = true;
|
||||
btnEast.setImageResource(R.drawable.ic_right_pressed);
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,0, 1);
|
||||
}
|
||||
} else {
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,0, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
isEastNorth = false;
|
||||
btnEastNorth = findViewById(R.id.btn_north_east);
|
||||
btnEastNorth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isEastNorth) {
|
||||
isEastNorth = true;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,45, 1);
|
||||
}
|
||||
} else {
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,45, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,45, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isEastSouth = false;
|
||||
btnEastSouth = findViewById(R.id.btn_south_east);
|
||||
btnEastSouth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isEastSouth) {
|
||||
isEastSouth = true;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,315, 1);
|
||||
}
|
||||
} else {
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,315, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,315, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWestNorth = false;
|
||||
btnWestNorth = findViewById(R.id.btn_north_west);
|
||||
btnWestNorth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isWestNorth) {
|
||||
isWestNorth = true;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,135, 1);
|
||||
}
|
||||
} else {
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,135, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,135, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWestSouth = false;
|
||||
btnWestSouth = findViewById(R.id.btn_south_west);
|
||||
btnWestSouth.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (isCenter) {
|
||||
if (!isWestSouth) {
|
||||
isWestSouth = true;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,225, 1);
|
||||
}
|
||||
} else {
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,225, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,225, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setListener(ButtonViewClickListener mListener) {
|
||||
this.mListener = mListener;
|
||||
}
|
||||
|
||||
public interface ButtonViewClickListener {
|
||||
/**
|
||||
* 点击的角度信息
|
||||
*/
|
||||
void clickAngleInfo(Boolean auto, double angle, double r);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
package com.zcshou.joystick;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.LayoutInflater;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.zcshou.gogogo.R;
|
||||
|
||||
public class ButtonView extends LinearLayout {
|
||||
|
||||
private ButtonViewClickListener mListener;
|
||||
boolean isCenter;
|
||||
ImageButton btnCenter;
|
||||
boolean isNorth;
|
||||
ImageButton btnNorth;
|
||||
boolean isSouth;
|
||||
ImageButton btnSouth;
|
||||
boolean isWest;
|
||||
ImageButton btnWest;
|
||||
boolean isEast;
|
||||
ImageButton btnEast;
|
||||
boolean isEastNorth;
|
||||
ImageButton btnEastNorth;
|
||||
boolean isEastSouth;
|
||||
ImageButton btnEastSouth;
|
||||
boolean isWestNorth;
|
||||
ImageButton btnWestNorth;
|
||||
boolean isWestSouth;
|
||||
ImageButton btnWestSouth;
|
||||
|
||||
public ButtonView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
LayoutInflater.from(context).inflate(R.layout.joystick_button, this);
|
||||
|
||||
initButtonView();
|
||||
}
|
||||
|
||||
public ButtonView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
|
||||
LayoutInflater.from(context).inflate(R.layout.joystick_button, this);
|
||||
initButtonView();
|
||||
}
|
||||
|
||||
public ButtonView(Context context) {
|
||||
super(context);
|
||||
|
||||
LayoutInflater.from(context).inflate(R.layout.joystick_button, this);
|
||||
|
||||
initButtonView();
|
||||
}
|
||||
|
||||
private void initButtonView() {
|
||||
isCenter = false;
|
||||
btnCenter = findViewById(R.id.btn_center);
|
||||
btnCenter.setOnClickListener(view -> {
|
||||
if (!isCenter) {
|
||||
isCenter = true;
|
||||
btnCenter.setImageResource(R.drawable.ic_lock_close);
|
||||
} else {
|
||||
isCenter = false;
|
||||
btnCenter.setImageResource(R.drawable.ic_lock_open);
|
||||
|
||||
if (isNorth) {
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
}
|
||||
if (isSouth) {
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
}
|
||||
if (isWest) {
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
}
|
||||
if (isEast) {
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
}
|
||||
if (isEastNorth) {
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
}
|
||||
if (isEastSouth) {
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
}
|
||||
if (isWestNorth) {
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
}
|
||||
if (isWestSouth) {
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
}
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,0, 0);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isNorth = false;
|
||||
btnNorth = findViewById(R.id.btn_north);
|
||||
btnNorth.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isNorth) {
|
||||
isNorth = true;
|
||||
btnNorth.setImageResource(R.drawable.ic_up_pressed);
|
||||
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,90, 1);
|
||||
}
|
||||
} else {
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,90, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,90, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isSouth = false;
|
||||
btnSouth = findViewById(R.id.btn_south);
|
||||
btnSouth.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isSouth) {
|
||||
isSouth = true;
|
||||
btnSouth.setImageResource(R.drawable.ic_down_pressed);
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,270, 1);
|
||||
}
|
||||
} else {
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,270, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,270, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWest = false;
|
||||
btnWest = findViewById(R.id.btn_west);
|
||||
btnWest.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isWest) {
|
||||
isWest = true;
|
||||
btnWest.setImageResource(R.drawable.ic_left_pressed);
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,180, 1);
|
||||
}
|
||||
} else {
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,180, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,180, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isEast = false;
|
||||
btnEast = findViewById(R.id.btn_east);
|
||||
btnEast.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isEast) {
|
||||
isEast = true;
|
||||
btnEast.setImageResource(R.drawable.ic_right_pressed);
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,0, 1);
|
||||
}
|
||||
} else {
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,0, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,0, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
isEastNorth = false;
|
||||
btnEastNorth = findViewById(R.id.btn_north_east);
|
||||
btnEastNorth.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isEastNorth) {
|
||||
isEastNorth = true;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,45, 1);
|
||||
}
|
||||
} else {
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,45, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,45, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isEastSouth = false;
|
||||
btnEastSouth = findViewById(R.id.btn_south_east);
|
||||
btnEastSouth.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isEastSouth) {
|
||||
isEastSouth = true;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,315, 1);
|
||||
}
|
||||
} else {
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,315, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,315, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWestNorth = false;
|
||||
btnWestNorth = findViewById(R.id.btn_north_west);
|
||||
btnWestNorth.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isWestNorth) {
|
||||
isWestNorth = true;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,135, 1);
|
||||
}
|
||||
} else {
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,135, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,135, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWestSouth = false;
|
||||
btnWestSouth = findViewById(R.id.btn_south_west);
|
||||
btnWestSouth.setOnClickListener(view -> {
|
||||
if (isCenter) {
|
||||
if (!isWestSouth) {
|
||||
isWestSouth = true;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down_pressed);
|
||||
|
||||
isNorth = false;
|
||||
btnNorth.setImageResource(R.drawable.ic_up);
|
||||
isSouth = false;
|
||||
btnSouth.setImageResource(R.drawable.ic_down);
|
||||
isWest = false;
|
||||
btnWest.setImageResource(R.drawable.ic_left);
|
||||
isEast = false;
|
||||
btnEast.setImageResource(R.drawable.ic_right);
|
||||
isEastNorth = false;
|
||||
btnEastNorth.setImageResource(R.drawable.ic_right_up);
|
||||
isEastSouth = false;
|
||||
btnEastSouth.setImageResource(R.drawable.ic_right_down);
|
||||
isWestNorth = false;
|
||||
btnWestNorth.setImageResource(R.drawable.ic_left_up);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(true,225, 1);
|
||||
}
|
||||
} else {
|
||||
isWestSouth = false;
|
||||
btnWestSouth.setImageResource(R.drawable.ic_left_down);
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,225, 0);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mListener != null) {
|
||||
mListener.clickAngleInfo(false,225, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void setListener(ButtonViewClickListener mListener) {
|
||||
this.mListener = mListener;
|
||||
}
|
||||
|
||||
public interface ButtonViewClickListener {
|
||||
/**
|
||||
* 点击的角度信息
|
||||
*/
|
||||
void clickAngleInfo(Boolean auto, double angle, double r);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,383 +1,354 @@
|
||||
package com.zcshou.joystick;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.os.Build;
|
||||
import android.os.CountDownTimer;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.zcshou.gogogo.R;
|
||||
|
||||
public class JoyStick extends View {
|
||||
|
||||
private Context mContext;
|
||||
private WindowManager.LayoutParams mWindowParams;
|
||||
private WindowManager mWindowManager;
|
||||
private final LayoutInflater inflater;
|
||||
private View mJoystickView;
|
||||
private LinearLayout mLatLngView;
|
||||
private JoyStickClickListener mListener;
|
||||
// 控制按键相关
|
||||
ImageButton btnInput;
|
||||
boolean isWalk;
|
||||
ImageButton btnWalk;
|
||||
boolean isRun;
|
||||
ImageButton btnRun;
|
||||
boolean isBike;
|
||||
ImageButton btnBike;
|
||||
|
||||
// 移动
|
||||
private TimeCount time;
|
||||
double mAngle;
|
||||
double mSpeed;
|
||||
SharedPreferences sharedPreferences;
|
||||
|
||||
public JoyStick(Context context) {
|
||||
super(context);
|
||||
this.mContext = context;
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
|
||||
initWindowManager();
|
||||
|
||||
inflater = LayoutInflater.from(mContext);
|
||||
|
||||
if (inflater != null) {
|
||||
initJoyStickView();
|
||||
|
||||
initJoyStickLatLngView();
|
||||
}
|
||||
|
||||
// 这里记录启动次数
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
long num = sharedPreferences.getLong("setting_startup_num", 0);
|
||||
sharedPreferences.edit()
|
||||
.putLong("setting_startup_num", ++num)
|
||||
.apply();
|
||||
|
||||
}
|
||||
|
||||
public JoyStick(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this.mContext = context;
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
|
||||
initWindowManager();
|
||||
|
||||
inflater = LayoutInflater.from(mContext);
|
||||
|
||||
if (inflater != null) {
|
||||
initJoyStickView();
|
||||
|
||||
initJoyStickLatLngView();
|
||||
}
|
||||
}
|
||||
|
||||
public JoyStick(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.mContext = context;
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
|
||||
initWindowManager();
|
||||
|
||||
inflater = LayoutInflater.from(mContext);
|
||||
|
||||
if (inflater != null) {
|
||||
initJoyStickView();
|
||||
|
||||
initJoyStickLatLngView();
|
||||
}
|
||||
}
|
||||
|
||||
private void initWindowManager() {
|
||||
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
|
||||
mWindowParams = new WindowManager.LayoutParams();
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 26) {//8.0新特性
|
||||
mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
} else {
|
||||
mWindowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
|
||||
}
|
||||
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
|
||||
Log.d("FLOAT", "initFloatWindow finish");
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private void initJoyStickView() {
|
||||
time = new TimeCount(1000, 1000);
|
||||
String sSpeed = sharedPreferences.getString("setting_walk", "");
|
||||
if (sSpeed == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_walk_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed);
|
||||
}
|
||||
|
||||
mJoystickView = inflater.inflate(R.layout.joystick, null);
|
||||
mJoystickView.setOnTouchListener(new JoyStickOnTouchListener());
|
||||
|
||||
btnInput = mJoystickView.findViewById(R.id.joystick_input);
|
||||
btnInput.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mJoystickView != null) {
|
||||
mWindowManager.removeView(mJoystickView);
|
||||
}
|
||||
|
||||
if (mLatLngView.getParent() == null) {
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
mWindowManager.addView(mLatLngView, mWindowParams);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isWalk = true;
|
||||
btnWalk = mJoystickView.findViewById(R.id.joystick_walk);
|
||||
btnWalk.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!isWalk) {
|
||||
btnWalk.setImageResource(R.drawable.ic_walk_pressed);
|
||||
isWalk = true;
|
||||
btnRun.setImageResource(R.drawable.ic_run);
|
||||
isRun = false;
|
||||
btnBike.setImageResource(R.drawable.ic_bike);
|
||||
isBike = false;
|
||||
String sSpeed = sharedPreferences.getString("setting_walk", "");
|
||||
if (sSpeed == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_walk_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed);
|
||||
}
|
||||
mListener.setCurrentSpeed(mSpeed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isRun = false;
|
||||
btnRun = mJoystickView.findViewById(R.id.joystick_run);
|
||||
btnRun.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!isRun) {
|
||||
btnRun.setImageResource(R.drawable.ic_run_pressed);
|
||||
isRun = true;
|
||||
btnWalk.setImageResource(R.drawable.ic_walk);
|
||||
isWalk = false;
|
||||
btnBike.setImageResource(R.drawable.ic_bike);
|
||||
isBike = false;
|
||||
String sSpeed = sharedPreferences.getString("setting_run", "");
|
||||
if (sSpeed == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_run_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed);
|
||||
}
|
||||
mListener.setCurrentSpeed(mSpeed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
isBike = false;
|
||||
btnBike = mJoystickView.findViewById(R.id.joystick_bike);
|
||||
btnBike.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!isBike) {
|
||||
btnBike.setImageResource(R.drawable.ic_bike_pressed);
|
||||
isBike = true;
|
||||
btnWalk.setImageResource(R.drawable.ic_walk);
|
||||
isWalk = false;
|
||||
btnRun.setImageResource(R.drawable.ic_run);
|
||||
isRun = false;
|
||||
String sSpeed = sharedPreferences.getString("setting_bike", "");
|
||||
if (sSpeed == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_bike_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed);
|
||||
}
|
||||
mListener.setCurrentSpeed(mSpeed);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ButtonView btnView = mJoystickView.findViewById(R.id.joystick_view);
|
||||
btnView.setListener(new ButtonView.ButtonViewClickListener() {
|
||||
@Override
|
||||
public void clickAngleInfo(Boolean auto, double angle, double r) {
|
||||
if (r <= 0) {
|
||||
time.cancel();
|
||||
} else {
|
||||
mAngle = angle;
|
||||
mSpeed = mSpeed * r;
|
||||
if (auto) {
|
||||
time.start();
|
||||
} else {
|
||||
time.cancel();
|
||||
mListener.clickAngleInfo(mAngle, mSpeed);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressLint({"InflateParams", "ClickableViewAccessibility"})
|
||||
private void initJoyStickLatLngView() {
|
||||
mLatLngView = (LinearLayout)inflater.inflate(R.layout.joystick_latlng, null);
|
||||
mLatLngView.setOnTouchListener(new JoyStickOnTouchListener());
|
||||
|
||||
|
||||
Button btnOk = mLatLngView.findViewById(R.id.joystick_latlng_ok);
|
||||
btnOk.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() == null) {
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
|
||||
mWindowManager.addView(mJoystickView, mWindowParams);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
Button btnCancel = mLatLngView.findViewById(R.id.joystick_latlng_cancel);
|
||||
btnCancel.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() == null) {
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
|
||||
mWindowManager.addView(mJoystickView, mWindowParams);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() == null) {
|
||||
mWindowManager.addView(mJoystickView, mWindowParams);
|
||||
}
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() != null) {
|
||||
mWindowManager.removeView(mJoystickView);
|
||||
}
|
||||
}
|
||||
|
||||
public void setListener(JoyStickClickListener mListener) {
|
||||
this.mListener = mListener;
|
||||
}
|
||||
|
||||
private class JoyStickOnTouchListener implements OnTouchListener {
|
||||
private int x;
|
||||
private int y;
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
x = (int) event.getRawX();
|
||||
y = (int) event.getRawY();
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
int nowX = (int) event.getRawX();
|
||||
int nowY = (int) event.getRawY();
|
||||
int movedX = nowX - x;
|
||||
int movedY = nowY - y;
|
||||
x = nowX;
|
||||
y = nowY;
|
||||
mWindowParams.x = mWindowParams.x + movedX;
|
||||
mWindowParams.y = mWindowParams.y + movedY;
|
||||
mWindowManager.updateViewLayout(view, mWindowParams);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
view.performClick();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public interface JoyStickClickListener {
|
||||
void clickAngleInfo(double angle, double speed);
|
||||
|
||||
void setCurrentSpeed(double speed);
|
||||
}
|
||||
|
||||
class TimeCount extends CountDownTimer {
|
||||
public TimeCount(long millisInFuture, long countDownInterval) {
|
||||
super(millisInFuture, countDownInterval);//参数依次为总时长,和计时的时间间隔
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {//计时完毕时触发
|
||||
mListener.clickAngleInfo(mAngle, mSpeed);
|
||||
time.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTick(long millisUntilFinished) { //计时过程显示
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
package com.zcshou.joystick;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.os.CountDownTimer;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.Gravity;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import com.zcshou.gogogo.R;
|
||||
|
||||
public class JoyStick extends View {
|
||||
|
||||
final private Context mContext;
|
||||
private WindowManager.LayoutParams mWindowParams;
|
||||
private WindowManager mWindowManager;
|
||||
private final LayoutInflater inflater;
|
||||
private View mJoystickView;
|
||||
private LinearLayout mLatLngView;
|
||||
private JoyStickClickListener mListener;
|
||||
// 控制按键相关
|
||||
ImageButton btnInput;
|
||||
boolean isWalk;
|
||||
ImageButton btnWalk;
|
||||
boolean isRun;
|
||||
ImageButton btnRun;
|
||||
boolean isBike;
|
||||
ImageButton btnBike;
|
||||
|
||||
// 移动
|
||||
private TimeCount time;
|
||||
double mAngle;
|
||||
double mSpeed;
|
||||
SharedPreferences sharedPreferences;
|
||||
|
||||
public JoyStick(Context context) {
|
||||
super(context);
|
||||
this.mContext = context;
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
|
||||
initWindowManager();
|
||||
|
||||
inflater = LayoutInflater.from(mContext);
|
||||
|
||||
if (inflater != null) {
|
||||
initJoyStickView();
|
||||
|
||||
initJoyStickLatLngView();
|
||||
}
|
||||
|
||||
// 这里记录启动次数
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
long num = sharedPreferences.getLong("setting_startup_num", 0);
|
||||
sharedPreferences.edit()
|
||||
.putLong("setting_startup_num", ++num)
|
||||
.apply();
|
||||
|
||||
}
|
||||
|
||||
public JoyStick(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this.mContext = context;
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
|
||||
initWindowManager();
|
||||
|
||||
inflater = LayoutInflater.from(mContext);
|
||||
|
||||
if (inflater != null) {
|
||||
initJoyStickView();
|
||||
|
||||
initJoyStickLatLngView();
|
||||
}
|
||||
}
|
||||
|
||||
public JoyStick(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.mContext = context;
|
||||
|
||||
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext);
|
||||
|
||||
initWindowManager();
|
||||
|
||||
inflater = LayoutInflater.from(mContext);
|
||||
|
||||
if (inflater != null) {
|
||||
initJoyStickView();
|
||||
|
||||
initJoyStickLatLngView();
|
||||
}
|
||||
}
|
||||
|
||||
private void initWindowManager() {
|
||||
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
|
||||
mWindowParams = new WindowManager.LayoutParams();
|
||||
mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
|
||||
Log.d("FLOAT", "initFloatWindow finish");
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private void initJoyStickView() {
|
||||
time = new TimeCount(1000, 1000);
|
||||
String sSpeed = sharedPreferences.getString("setting_walk", "");
|
||||
if (sSpeed == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_walk_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed);
|
||||
}
|
||||
|
||||
mJoystickView = inflater.inflate(R.layout.joystick, null);
|
||||
mJoystickView.setOnTouchListener(new JoyStickOnTouchListener());
|
||||
|
||||
btnInput = mJoystickView.findViewById(R.id.joystick_input);
|
||||
btnInput.setOnClickListener(v -> {
|
||||
if (mJoystickView != null) {
|
||||
mWindowManager.removeView(mJoystickView);
|
||||
}
|
||||
|
||||
if (mLatLngView.getParent() == null) {
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.MATCH_PARENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
mWindowManager.addView(mLatLngView, mWindowParams);
|
||||
}
|
||||
});
|
||||
|
||||
isWalk = true;
|
||||
btnWalk = mJoystickView.findViewById(R.id.joystick_walk);
|
||||
btnWalk.setOnClickListener(v -> {
|
||||
if (!isWalk) {
|
||||
btnWalk.setImageResource(R.drawable.ic_walk_pressed);
|
||||
isWalk = true;
|
||||
btnRun.setImageResource(R.drawable.ic_run);
|
||||
isRun = false;
|
||||
btnBike.setImageResource(R.drawable.ic_bike);
|
||||
isBike = false;
|
||||
String sSpeed1 = sharedPreferences.getString("setting_walk", "");
|
||||
if (sSpeed1 == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_walk_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed1);
|
||||
}
|
||||
mListener.setCurrentSpeed(mSpeed);
|
||||
}
|
||||
});
|
||||
|
||||
isRun = false;
|
||||
btnRun = mJoystickView.findViewById(R.id.joystick_run);
|
||||
btnRun.setOnClickListener(v -> {
|
||||
if (!isRun) {
|
||||
btnRun.setImageResource(R.drawable.ic_run_pressed);
|
||||
isRun = true;
|
||||
btnWalk.setImageResource(R.drawable.ic_walk);
|
||||
isWalk = false;
|
||||
btnBike.setImageResource(R.drawable.ic_bike);
|
||||
isBike = false;
|
||||
String sSpeed12 = sharedPreferences.getString("setting_run", "");
|
||||
if (sSpeed12 == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_run_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed12);
|
||||
}
|
||||
mListener.setCurrentSpeed(mSpeed);
|
||||
}
|
||||
});
|
||||
|
||||
isBike = false;
|
||||
btnBike = mJoystickView.findViewById(R.id.joystick_bike);
|
||||
btnBike.setOnClickListener(v -> {
|
||||
if (!isBike) {
|
||||
btnBike.setImageResource(R.drawable.ic_bike_pressed);
|
||||
isBike = true;
|
||||
btnWalk.setImageResource(R.drawable.ic_walk);
|
||||
isWalk = false;
|
||||
btnRun.setImageResource(R.drawable.ic_run);
|
||||
isRun = false;
|
||||
String sSpeed13 = sharedPreferences.getString("setting_bike", "");
|
||||
if (sSpeed13 == null) {
|
||||
mSpeed = Double.parseDouble(getResources().getString(R.string.setting_bike_default));
|
||||
} else {
|
||||
mSpeed = Double.parseDouble(sSpeed13);
|
||||
}
|
||||
mListener.setCurrentSpeed(mSpeed);
|
||||
}
|
||||
});
|
||||
|
||||
ButtonView btnView = mJoystickView.findViewById(R.id.joystick_view);
|
||||
btnView.setListener((auto, angle, r) -> {
|
||||
if (r <= 0) {
|
||||
time.cancel();
|
||||
} else {
|
||||
mAngle = angle;
|
||||
mSpeed = mSpeed * r;
|
||||
if (auto) {
|
||||
time.start();
|
||||
} else {
|
||||
time.cancel();
|
||||
mListener.clickAngleInfo(mAngle, mSpeed);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@SuppressLint({"InflateParams", "ClickableViewAccessibility"})
|
||||
private void initJoyStickLatLngView() {
|
||||
mLatLngView = (LinearLayout)inflater.inflate(R.layout.joystick_latlng, null);
|
||||
mLatLngView.setOnTouchListener(new JoyStickOnTouchListener());
|
||||
|
||||
|
||||
Button btnOk = mLatLngView.findViewById(R.id.joystick_latlng_ok);
|
||||
btnOk.setOnClickListener(v -> {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() == null) {
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
|
||||
mWindowManager.addView(mJoystickView, mWindowParams);
|
||||
}
|
||||
|
||||
});
|
||||
Button btnCancel = mLatLngView.findViewById(R.id.joystick_latlng_cancel);
|
||||
btnCancel.setOnClickListener(v -> {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() == null) {
|
||||
mWindowParams.format = PixelFormat.RGBA_8888;
|
||||
mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
|
||||
mWindowParams.gravity = Gravity.START | Gravity.TOP;
|
||||
mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
|
||||
mWindowParams.x = 300;
|
||||
mWindowParams.y = 300;
|
||||
|
||||
mWindowManager.addView(mJoystickView, mWindowParams);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void show() {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() == null) {
|
||||
mWindowManager.addView(mJoystickView, mWindowParams);
|
||||
}
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
if (mLatLngView.getParent() != null) {
|
||||
mWindowManager.removeView(mLatLngView);
|
||||
}
|
||||
|
||||
if (mJoystickView.getParent() != null) {
|
||||
mWindowManager.removeView(mJoystickView);
|
||||
}
|
||||
}
|
||||
|
||||
public void setListener(JoyStickClickListener mListener) {
|
||||
this.mListener = mListener;
|
||||
}
|
||||
|
||||
private class JoyStickOnTouchListener implements OnTouchListener {
|
||||
private int x;
|
||||
private int y;
|
||||
|
||||
@Override
|
||||
public boolean onTouch(View view, MotionEvent event) {
|
||||
switch (event.getAction()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
x = (int) event.getRawX();
|
||||
y = (int) event.getRawY();
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
int nowX = (int) event.getRawX();
|
||||
int nowY = (int) event.getRawY();
|
||||
int movedX = nowX - x;
|
||||
int movedY = nowY - y;
|
||||
x = nowX;
|
||||
y = nowY;
|
||||
mWindowParams.x = mWindowParams.x + movedX;
|
||||
mWindowParams.y = mWindowParams.y + movedY;
|
||||
mWindowManager.updateViewLayout(view, mWindowParams);
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
view.performClick();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public interface JoyStickClickListener {
|
||||
void clickAngleInfo(double angle, double speed);
|
||||
|
||||
void setCurrentSpeed(double speed);
|
||||
}
|
||||
|
||||
class TimeCount extends CountDownTimer {
|
||||
public TimeCount(long millisInFuture, long countDownInterval) {
|
||||
super(millisInFuture, countDownInterval);//参数依次为总时长,和计时的时间间隔
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {//计时完毕时触发
|
||||
mListener.clickAngleInfo(mAngle, mSpeed);
|
||||
time.start();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTick(long millisUntilFinished) { //计时过程显示
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -133,35 +133,22 @@ public class GoService extends Service {
|
||||
Intent hideIntent = new Intent("HideJoyStick");
|
||||
PendingIntent hidePendingPI = PendingIntent.getBroadcast(this, 0, hideIntent, PendingIntent.FLAG_CANCEL_CURRENT );
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
NotificationChannel mChannel = new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_LOW);
|
||||
Log.i("GoService", mChannel.toString());
|
||||
NotificationChannel mChannel = new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_LOW);
|
||||
Log.i("GoService", mChannel.toString());
|
||||
|
||||
if (notificationManager != null) {
|
||||
notificationManager.createNotificationChannel(mChannel);
|
||||
}
|
||||
|
||||
notification = new NotificationCompat.Builder(this, channelId)
|
||||
.setChannelId(channelId)
|
||||
.setContentTitle(getResources().getString(R.string.app_name))
|
||||
.setContentText(getResources().getString(R.string.app_service))
|
||||
.setContentIntent(clickPI)
|
||||
.addAction(new NotificationCompat.Action(null, "显示摇杆", showPendingPI))
|
||||
.addAction(new NotificationCompat.Action(null, "隐藏摇杆", hidePendingPI))
|
||||
.setSmallIcon(R.mipmap.ic_launcher).build();
|
||||
} else {
|
||||
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "M_CH_ID")
|
||||
.setContentTitle(getResources().getString(R.string.app_name))
|
||||
.setContentText(getResources().getString(R.string.app_service))
|
||||
.setSmallIcon(R.mipmap.ic_launcher)
|
||||
.setContentIntent(clickPI)
|
||||
.addAction(new NotificationCompat.Action(null, "显示摇杆", showPendingPI))
|
||||
.addAction(new NotificationCompat.Action(null, "隐藏摇杆", hidePendingPI))
|
||||
.setOngoing(true)
|
||||
.setChannelId(channelId);//无效
|
||||
notification = notificationBuilder.build();
|
||||
if (notificationManager != null) {
|
||||
notificationManager.createNotificationChannel(mChannel);
|
||||
}
|
||||
|
||||
notification = new NotificationCompat.Builder(this, channelId)
|
||||
.setChannelId(channelId)
|
||||
.setContentTitle(getResources().getString(R.string.app_name))
|
||||
.setContentText(getResources().getString(R.string.app_service))
|
||||
.setContentIntent(clickPI)
|
||||
.addAction(new NotificationCompat.Action(null, "显示摇杆", showPendingPI))
|
||||
.addAction(new NotificationCompat.Action(null, "隐藏摇杆", hidePendingPI))
|
||||
.setSmallIcon(R.mipmap.ic_launcher).build();
|
||||
|
||||
startForeground(1, notification);
|
||||
|
||||
curLatLng = intent.getStringExtra("CurLatLng");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user