Giter VIP home page Giter VIP logo

rocker's Introduction

Rocker

安卓虚拟摇杆

作者微博: @安卓攻城师sloop

说明

由于需要制作一个控制小车移动的应用,使用按键控制不太舒服,故制作了一个虚拟摇杆。

该摇杆原理十分简单,就是继承一个surfaceView,然后根据用户操作不断重绘界面,同时返回给用户当前角度。 如果用户不指定摇杆背景和摇杆,则默认绘制两个圆形,效果如下图所示。

rocker3 rocker3

摇杆的图片和背景图片可以随意指定,并且在运行过程中也可以更换(ps:图片内容需要为圆形且背景透明),指定图片后效果如下:

rocker3 rocker3

使用示例:

1.在布局文件中添加摇杆

 <com.sloop.widget.Rocker
     android:id="@+id/rudder"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

2.找到该组件,指定摇杆图片和背景图片(可省略)

Rocker rocker = (Rocker) findViewById(R.id.rudder);
	Bitmap rocker_bg = BitmapFactory.decodeResource(getResources(), R.drawable.rocker_bg1);
	Bitmap rocker_ctrl = BitmapFactory.decodeResource(getResources(), R.drawable.rocker_ctrl);
	rocker.setRockerBg(rocker_bg);
	rocker.setRockerCtrl(rocker_ctrl);

3.设置监听器获得摇杆状态

  rocker.setRudderListener(new Rocker.RudderListener() {
		@Override
		public void onSteeringWheelChanged(int action, int angle) {
			if (action == Rocker.ACTION_RUDDER) {
				//TODO:事件实现
				Log.e("夹角", "angle"+angle);
			}
		}
	});

组件设置参数的方法:

/** 设置摇杆背景图  */
public void setRockerBg(Bitmap bitmap) {
    rocker_bg = Bitmap.createScaledBitmap(bitmap, mWheelRadius * 2, mWheelRadius * 2, true);
}

/** 设置摇杆图片 */
public void setRockerCtrl(Bitmap bitmap) {
    rocker_ctrl = Bitmap.createScaledBitmap(bitmap, mRudderRadius * 2, mRudderRadius * 2, true);
}

/** 设置摇杆活动半径  */
public void setmWheelRadius(int radius) {
    mWheelRadius = DensityUtil.dip2px((ContextThemeWrapper) context, radius);
}

/** 设置摇杆半径 */
public void setmRudderRadius(int radius) {
    mRudderRadius = DensityUtil.dip2px((ContextThemeWrapper) context, radius);
}

ps:摇杆位置默认处于surfaceView的中心,故这里没有提供设置摇杆位置的方法。

作者微博: @安卓攻城师sloop

rocker's People

Contributors

gcssloop avatar

Watchers

James Cloos avatar yan avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.