做网站推广员工/线上营销渠道主要有哪些
Android记录9--实现转盘效果
2013年10月16日
我今天也只是刚好看到这个,看到网友实现了一个转盘的效果,但试了一下好像不太行,所以就修改了一下程序最终实现转盘的效果,我对Android 绘画这一块用得不多,一般在开发游戏的时候可能会用得较多,所以很多地方都不太清楚。
下面是转盘的效果图:
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/back"><com.wwj.turnplate.TurnPlateViewandroid:id="@+id/turnplate"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true" /><Buttonandroid:id="@+id/btnStart"android:layout_width="70dp"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:text="开始" /><Buttonandroid:id="@+id/btnStop"android:layout_width="70dp"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:text="结束" /></RelativeLayout>
自定义View
/2013.10.16_TurnPlate_Demo/src/com/wwj/turnplate/TurnPlateView.java
package com.wwj.turnplate;import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.View;public class TurnPlateView extends View implements Runnable{// 界面需要的图片private Bitmap turnPlatePic; // 转盘图片private Bitmap pointerPic; // 指针图片// 旋转矩阵private Matrix panRotate = new Matrix();// 平移矩阵private Matrix pointerTranslate = new Matrix();private int x = 0;private boolean ifRoate = false;public TurnPlateView(Context context, AttributeSet attrs) {super(context, attrs);Resources r = context.getResources();// 生成图片turnPlatePic = BitmapFactory.decodeStream(r.openRawResource(R.drawable.turnplate));pointerPic = BitmapFactory.decodeStream(r.openRawResource(R.drawable.pointer));// 用线程刷新界面Thread thread = new Thread(this);thread.start();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.translate(75, 100);canvas.drawBitmap(turnPlatePic, panRotate, null);canvas.translate(turnPlatePic.getWidth() / 2 - pointerPic.getWidth() / 2, 20);canvas.rotate(x, pointerPic.getWidth() / 2,pointerPic.getHeight() - 35);canvas.drawBitmap(pointerPic, pointerTranslate, null);}@Overridepublic void run() {try {while(true) {if (ifRoate) {this.x += 25;//这个函数强制UI线程刷新界面this.postInvalidate();Thread.sleep(50);}}} catch(InterruptedException e) {e.printStackTrace();}}public void startRoate() {this.ifRoate = true;}public void stopRotate() {this.ifRoate = false;}
}
主Activity
package com.wwj.turnplate;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class MainActivity extends Activity implements OnClickListener{private TurnPlateView plateView;private Button btnStart;private Button btnStop;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);plateView = (TurnPlateView) findViewById(R.id.turnplate);btnStart = (Button) findViewById(R.id.btnStart);btnStop = (Button) findViewById(R.id.btnStop);btnStart.setOnClickListener(this);btnStop.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch(v.getId()) {case R.id.btnStart:plateView.startRoate();break;case R.id.btnStop:plateView.stopRotate();break;}}}