防微信雷達掃描加好友控制元件實現

銳湃發表於2015-09-15

效果圖如下:



RadarView.java

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.SweepGradient;
import android.os.Handler;
import android.util.AttributeSet;
import android.widget.FrameLayout;

public class RadarView extends FrameLayout {
	private int w, h;
	private Matrix matrix;
	private Paint mPaintLine;// 畫普通圓和線的畫筆
	private Paint mPaintSector;// 畫有漸變效果的圓的畫筆
	public boolean isstart = false;
	private int start;
	private Handler handler = new Handler();
	private Runnable run = new Runnable() {

		public void run() {
			// TODO Auto-generated method stub
			start = start + 1;
			matrix = new Matrix();
			matrix.postRotate(start, w / 2, h / 2);
			RadarView.this.invalidate();
			handler.postDelayed(run, 50);
		}
	};

	public RadarView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
		initPaint();
		setBackgroundResource(R.drawable.a1v);
		w = context.getResources().getDisplayMetrics().widthPixels;
		h = context.getResources().getDisplayMetrics().heightPixels;
		handler.post(run);
	}

	private void initPaint() {
		// TODO Auto-generated method stub
		mPaintLine = new Paint();
		mPaintLine.setColor(Color.parseColor("#A1A1A1"));
		mPaintLine.setStrokeWidth(3);
		mPaintLine.setAntiAlias(true);
		mPaintLine.setStyle(Style.STROKE);

		mPaintSector = new Paint();
		mPaintSector.setColor(0x9D00ff00);
		mPaintSector.setAntiAlias(true);
		matrix = new Matrix();
	}

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		// TODO Auto-generated method stub
		setMeasuredDimension(w, h);
	}

	@SuppressLint("DrawAllocation")
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		canvas.drawCircle(w / 2, h / 2, w / 6, mPaintLine);// 小圓
		canvas.drawCircle(w / 2, h / 2, 2 * w / 6, mPaintLine);// 中圓
		canvas.drawCircle(w / 2, h / 2, 11 * w / 20, mPaintLine);
		canvas.drawCircle(w / 2, h / 2, 7 * h / 16, mPaintLine);// 大圓
		SweepGradient mShader = new SweepGradient(w / 2, h / 2,
				Color.TRANSPARENT, Color.parseColor("#AAAAAAAA"));
		mPaintSector.setShader(mShader);
		canvas.concat(matrix);
		canvas.drawCircle(w / 2, h / 2, 7 * h / 16, mPaintSector);
		super.onDraw(canvas);
	}
}

activity:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class CustomerRadarViewActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_customer_radar_view);
	}
	public void quit(View v){
		finish();
	}
}

佈局檔案:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <com.tz.dream.customer.view.RadarView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:layout_marginTop="15dp"
        android:src="@drawable/girl" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:layout_marginBottom="30dp"
        android:layout_marginLeft="5dp"
        android:background="@drawable/back_selector"
        android:paddingBottom="3dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        android:paddingTop="3dp"
        android:text="退出"
        android:textColor="#A1A1A1" 
        android:onClick="quit"/>

</FrameLayout>

整理自原始碼

相關文章