仿雷达搜索

网上下载了几张图片,做了个demo

资源下载:http://download.youkuaiyun.com/detail/hello_12413/8601533

别的不说了,直接上图上代码


代码如下:

package com.example.actionbaraddui;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.RectF;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * @project javaapk.com-ActionBarAddUI
 * @ClassName ScanView.java
 * @Description 搜索页面,模仿雷达 背景不动,指针转动
 * @author xugang
 * @date 2015-4-9 下午5:04:08
 */
public class ScanView extends View implements Runnable {

	/** 转盘 */
	private Bitmap plate;
	/** 指针 */
	private Bitmap pointer;

	private Bitmap btn;

	private float Angel = 0.0f;
	private Matrix matx = new Matrix();

	private boolean isStopRoter = false;
	private Point mPoint;

	public ScanView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		new Thread(this).start();
	}

	public ScanView(Context context, AttributeSet attrs) {
		this(context, attrs, 0);
	}

	public ScanView(Context context) {
		this(context, null);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		init();
		canvas.restore();
		Paint paintPlate = new Paint();
		canvas.drawBitmap(plate, (canvas.getWidth() - plate.getWidth()) / 2, (canvas.getHeight() - plate.getHeight()) / 2, paintPlate);

		matx.reset();
		matx.setTranslate(canvas.getWidth() / 2 - pointer.getWidth(), canvas.getHeight() / 2);
		matx.postRotate(Angel, canvas.getWidth() / 2, canvas.getHeight() / 2);

		Paint paintPointer = new Paint();
		canvas.drawBitmap(pointer, matx, paintPointer);

		Paint paintBtn = new Paint();
		canvas.drawBitmap(btn, (canvas.getWidth() - btn.getWidth()) / 2, (canvas.getHeight() - btn.getHeight()) / 2, paintBtn);
		mPoint = new Point(canvas.getWidth() / 2, canvas.getHeight() / 2);
	}

	private void init() {
		if (plate == null)
			plate = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.gplus_search_bg));
		if (btn == null)
			btn = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.locus_round_click));
		if (pointer == null)
			pointer = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.gplus_search_args));
	}

	Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			invalidate();
		};
	};

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			handleActionDownEvenet(event);
			return true;
		case MotionEvent.ACTION_MOVE:
			return true;
		case MotionEvent.ACTION_UP:
			return true;
		}
		return super.onTouchEvent(event);
	}
	//判断是否点击了中间点
	private void handleActionDownEvenet(MotionEvent event) {
		int x = (int) event.getX();
		int y = (int) event.getY();
		RectF rectF = new RectF(getWidth() / 2 - btn.getWidth() / 2, getHeight() / 2 - btn.getHeight() / 2, getWidth() / 2 + btn.getWidth() / 2, getHeight() / 2 + btn.getHeight() / 2);

		if (rectF.contains(event.getX(), event.getY())) {
			isStopRoter = !isStopRoter;
		}
	}

	@Override
	public void run() {
		while (true) {
			try {
				Thread.sleep(40);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			if (isStopRoter) {
				Angel += 5;
				handler.sendEmptyMessage(1);
			}
		}
	}

}

遗留问题:1、大小不能随意变化,这个还需要研究研究。

                  2、用的是矩阵变化,这里有个前乘和后乘的问题





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值