通过surfaceView实现的虚拟摇杆控制

这篇博客介绍了在机器人开发的移动端APP中,如何利用SurfaceView创建一个类似游戏手柄的虚拟摇杆控制界面。SurfaceView允许在非UI线程上进行绘制,具有性能优势。博主展示了虚拟摇杆的设计,包括背景图片和可滑动的渐变色圆圈,以及四个控制区域对应前后左右四个指令。为了实现动态坐标更新,博主重写了触摸滑动方法,并设置200ms更新一次界面。
摘要由CSDN通过智能技术生成

  我们的机器人开发当中,移动端APP有一个控制的功能,实现当中,使用了一个类似于游戏手柄的界面,面对这样的界面首先肯定想到了使用"绘制"的方式搞定.那么就会使用到view或者surfaceview来实现了,而使用surfaceview能够在非UI线程上面进行,这必然是一大优势.先上图:


  外部是一个背景图片,中间的渐变色圆圈是可以滑动"虚拟摇杆",控制区域是分为四个区域,如下图所示:


  和第一个图相对比,其实就是要让虚拟摇杆在上图滑动的时候,在"A/B/C/D"四个区域内做方向的输出指令变化,由于下位机提供的指令只有前后左右四个指令,因此目前我认为只有这样实现比较方便和直观了,要实现这样一个绘制区域,那么肯定会使用到坐标和对应的直线方程知识了,在这里先暂时不具体说方程,先看看布局如何加载:

<com.~~.demoapplication.ControlView
    android:id="@+id/control_view"
    android:layout_width="200dp"
    android:layout_height="200dp"
    android:layout_gravity="center"
    />
  新建一个xml文件,然后添加这个布局在里面背景图片我们在代码里面添加:

public ControlView(Context context, AttributeSet attrs){
    super(context, attrs);

    setBackgroundResource(R.drawable.hand_control_base);
     setZOrderOnTop(true);//使surfaceview放到最顶层
    getHolder().setFormat(PixelFormat.TRANSLUCENT);//使窗口支持透明度

    //初始化画笔
    initPaint();
    sfh = getHolder();
    sfh.addCallback(this);
    th = new Thread(new DrawViewRunnable());
}
  在ControlView生命周期函数里面增加背景图片,然后设置为最顶层,并且透明显示,要不然只会出现一个黑框的surfaceView区域.然后初始化paint,得到holder和 callback.最后一句是开启绘制线程.

  绘制线程我设置了200ms绘制更新一次界面:

class DrawViewRunnable implements Runnable {

    @Override
    public void run() {
        while(beginDrawing){
            try{
                myDraw();
                Thread.sleep(200);
            }catch
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值