初步实现舵机转动

chenghonghao_branch
MikkoAyaka 1 year ago
parent 746392a6f6
commit 08c773250c

@ -52,6 +52,7 @@ android {
} }
dependencies { dependencies {
implementation 'io.github.litao0621:nifty-slider:1.4.6'
implementation fileTree(dir: 'libs', include: ['*.jar']) implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.android.material:material:1.8.0'

@ -7,12 +7,9 @@
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="adnroid.permission.CHANGE_WIFI_STATE" /> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="adnroid.permission.CHANGE_WIFI_STATE" /> <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" /> <!-- 在SDCard中创建与删除文件权限 --> <uses-permission android:name="android.permission.RESTART_PACKAGES" /> <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

@ -23,7 +23,9 @@ import android.view.View;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.Toast; import android.widget.Toast;
import java.io.File; import java.io.File;
@ -48,6 +50,7 @@ public class MyVideo extends Activity {
InputStream socketReader; InputStream socketReader;
SocketListener socketListener2001; SocketListener socketListener2001;
SoundSocketListener socketListener2002; SoundSocketListener socketListener2002;
SeekBar xSeekbar,ySeekbar;
private Socket socket; private Socket socket;
private Socket soundSocket; private Socket soundSocket;
private RockerView rockerView; private RockerView rockerView;
@ -56,6 +59,54 @@ public class MyVideo extends Activity {
@Override @Override
public void onCreate(Bundle savedInstanceState) { public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
LinearLayout linearLayout = findViewById(R.id.linearLayout4);
xSeekbar = linearLayout.findViewById(R.id.xSeekbar);
ySeekbar = linearLayout.findViewById(R.id.ySeekbar);
xSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
try {
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x07, (byte)((int)(progress * 1.8)), (byte) 0xff});
socketWriter.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
ySeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
try {
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 1.8)), (byte) 0xff});
socketWriter.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题应用的名字必须要写在setContentView之前否则会有异常 this.requestWindowFeature(Window.FEATURE_NO_TITLE);//隐去标题应用的名字必须要写在setContentView之前否则会有异常
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.myvideo); setContentView(R.layout.myvideo);
@ -77,27 +128,28 @@ public class MyVideo extends Activity {
} }
public void InitSocket(Activity activity) { public void InitSocket(Activity activity) {
try { // TODO ²âÊÔ
socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort)); // try {
soundSocket = new Socket(InetAddress.getByName(CtrlIp), 2002); // socket = new Socket(InetAddress.getByName(CtrlIp), Integer.parseInt(CtrlPort));
} catch (UnknownHostException e) { // soundSocket = new Socket(InetAddress.getByName(CtrlIp), 2002);
// TODO Auto-generated catch block // } catch (UnknownHostException e) {
e.printStackTrace(); // // TODO Auto-generated catch block
} catch (Exception e) { // e.printStackTrace();
// TODO Auto-generated catch block // } catch (Exception e) {
e.printStackTrace(); // // TODO Auto-generated catch block
} // e.printStackTrace();
try { // }
socketWriter = socket.getOutputStream(); // try {
socketReader = socket.getInputStream(); // socketWriter = socket.getOutputStream();
socketListener2001 = new SocketListener(activity,socketReader); // socketReader = socket.getInputStream();
socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream()); // socketListener2001 = new SocketListener(activity,socketReader);
} catch (Exception e) { // socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream());
// TODO Auto-generated catch block // } catch (Exception e) {
e.printStackTrace(); // // TODO Auto-generated catch block
} // e.printStackTrace();
// }
rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null); rockerView = new RockerView(this,socketWriter,this.getApplicationContext(),null);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(500,500); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(1000,1000);
addContentView(rockerView,params); addContentView(rockerView,params);
//Toast.makeText(this,"初始化网络失败!"+e.getMessage(),Toast.LENGTH_LONG).show(); //Toast.makeText(this,"初始化网络失败!"+e.getMessage(),Toast.LENGTH_LONG).show();
} }

@ -23,8 +23,8 @@ public class RockerView extends View{
Paint backPaint = new Paint(); // 背景画笔 Paint backPaint = new Paint(); // 背景画笔
Paint bubblePaint = new Paint(); // 气泡画笔 Paint bubblePaint = new Paint(); // 气泡画笔
Paint rectfPaint = new Paint(); Paint rectfPaint = new Paint();
float bubbleX = 0, bubbleY = 0; // 定义气泡的位置 float bubbleX = 300, bubbleY = 700; // 定义气泡的位置
float backX = 0, backY = 0; // 背景圆的位置 float backX = 300, backY = 700; // 背景圆的位置
int radiusBack = 200, radiusBubble = 100; // 定义背景圆以及气泡的半径 int radiusBack = 200, radiusBubble = 100; // 定义背景圆以及气泡的半径
RectF mRectF = new RectF(backX-radiusBack,backY-radiusBack,backX+radiusBack,backY+radiusBack); RectF mRectF = new RectF(backX-radiusBack,backY-radiusBack,backX+radiusBack,backY+radiusBack);
Context mContext; Context mContext;

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<corners android:radius="60dp" />
<gradient
android:angle="0"
android:centerColor="#F39801"
android:centerY="0.20"
android:endColor="#F39801"
android:startColor="#F39801" />
</shape>
</item>
</layer-list>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
>
<corners
android:radius="100dp"
/>
<solid
android:color="#B2FF0000"
/>
<size
android:width="100dp"
android:height="100dp"
/>
</shape>

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_width="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent"> android:layout_height="fill_parent">
<!-- <wificar.RockerView--> <!-- <wificar.RockerView-->
<!-- android:layout_width="100dp"--> <!-- android:layout_width="100dp"-->
@ -16,30 +17,74 @@
android:id="@+id/menuIcon" android:id="@+id/menuIcon"
android:layout_width="60dp" android:layout_width="60dp"
android:layout_height="60dp" android:layout_height="60dp"
android:layout_marginEnd="5dp"
android:layout_marginTop="5dp"
android:layout_alignParentEnd="true"
android:text="菜单" android:text="菜单"
/> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/mySurfaceViewVideo" />
<LinearLayout <LinearLayout
android:id="@+id/droppedMenu" android:id="@+id/droppedMenu"
android:layout_width="100dp" android:layout_width="300dp"
android:layout_height="200dp" android:layout_height="200dp"
android:layout_below="@+id/menuIcon" android:layout_below="@+id/menuIcon"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:animateLayoutChanges="true"
android:orientation="vertical" android:orientation="vertical"
android:animateLayoutChanges="true"/> app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo"
app:layout_constraintTop_toBottomOf="@+id/menuIcon">
</LinearLayout>
<wificar.MySurfaceView <wificar.MySurfaceView
android:id="@+id/mySurfaceViewVideo" android:id="@+id/mySurfaceViewVideo"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="18dp"
android:text="舵机X轴" />
<SeekBar
android:id="@+id/xSeekbar"
android:progress="50"
android:layout_width="300dp"
android:layout_height="30dp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout4">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="舵机Y轴"
android:textColor="#ffffff"
android:textSize="18dp" />
<SeekBar
android:id="@+id/ySeekbar"
android:layout_width="300dp"
android:progress="50"
android:layout_height="30dp" />
</LinearLayout>
<ImageView <ImageView
android:id="@+id/floatingView" android:id="@+id/floatingView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout <LinearLayout
android:id="@+id/linearLayout2" android:id="@+id/linearLayout2"
@ -48,9 +93,9 @@
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true" android:layout_alignParentBottom="true"
android:layout_marginRight="15dp" android:gravity="right"
android:layout_marginBottom="20dp" app:layout_constraintBottom_toBottomOf="parent"
android:gravity="right"> app:layout_constraintEnd_toEndOf="parent">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -75,8 +120,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@+id/linearLayout2" android:layout_above="@+id/linearLayout2"
android:layout_alignEnd="@+id/linearLayout2" android:layout_alignEnd="@+id/linearLayout2"
android:layout_marginTop="278dp" app:layout_constraintBottom_toTopOf="@+id/linearLayout2"
android:layout_marginBottom="20dp"> app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo">
<TextView <TextView
android:id="@+id/showLive" android:id="@+id/showLive"
@ -110,8 +155,9 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_above="@+id/linearLayout3" android:layout_above="@+id/linearLayout3"
android:layout_alignEnd="@+id/linearLayout3" android:layout_alignEnd="@+id/linearLayout3"
android:layout_marginBottom="-255dp" android:gravity="right"
android:gravity="right"> app:layout_constraintBottom_toTopOf="@+id/linearLayout3"
app:layout_constraintEnd_toEndOf="@+id/mySurfaceViewVideo">
<TextView <TextView
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -132,32 +178,4 @@
android:textSize="20dp" /> android:textSize="20dp" />
</LinearLayout> </LinearLayout>
<!-- <ImageView--> </androidx.constraintlayout.widget.ConstraintLayout>
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentStart="true"-->
<!-- android:layout_alignParentTop="true"-->
<!-- android:layout_marginStart="40dp"-->
<!-- android:layout_marginLeft="40dp"-->
<!-- android:layout_marginTop="260dp"-->
<!-- android:src="@drawable/rocket_circle1" />-->
<!-- <ImageView-->
<!-- android:layout_width="wrap_content"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:layout_alignParentStart="true"-->
<!-- android:layout_alignParentTop="true"-->
<!-- android:layout_marginStart="65dp"-->
<!-- android:layout_marginLeft="65dp"-->
<!-- android:layout_marginTop="285dp"-->
<!-- android:src="@drawable/rocket_circle2" />-->
<!-- <wificar.RockerView-->
<!-- android:id="@+id/rockerView"-->
<!-- android:layout_width="265dp"-->
<!-- android:layout_height="300dp"-->
<!-- android:layout_alignParentStart="true"-->
<!-- android:layout_alignParentTop="true"-->
<!-- android:layout_marginStart="5dp"-->
<!-- android:layout_marginTop="167dp" />-->
</RelativeLayout>
Loading…
Cancel
Save