ImageView 圆环旋转(二)

文档接上篇:http://blog.csdn.net/fuweiping/article/details/12951039


package com.mostmood.util;

import org.apache.http.impl.client.TunnelRefusedException;

import com.example.tabhostweixintest.R;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.graphics.PorterDuff.Mode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.graphics.RectF;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageView;

public class RotateUpdatedViewEx extends ImageView {

	private final Paint mpaint;

	private int mBorderThickness = 2;
	/**
	 * 内圆或者外圆的边框颜色
	 */
	private int mBorderColor = android.graphics.Color.YELLOW;
	/**
	 * 滑块颜色
	 */
	private int mSlidercolor = android.graphics.Color.CYAN;

	public RotateUpdatedViewEx(Context mContext, AttributeSet attrs) {
		super(mContext, attrs);
		this.mpaint = new Paint();
		this.mpaint.setAntiAlias(true);
		this.mpaint.setStyle(Style.STROKE);
		if (isInEditMode()) {
			isDraw = true;
			mBorderThickness = 4;
		} else {
			mBorderThickness = mContext.getResources().getDimensionPixelSize(
					R.dimen.rotatethiness);
		}
	}

	int startAngle = 0;

	public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
		Bitmap scaledSrcBmp;
		int diameter = radius * 2;
		if (bmp.getWidth() != diameter || bmp.getHeight() != diameter)
			scaledSrcBmp = Bitmap.createScaledBitmap(bmp, diameter, diameter,
					false);
		else
			scaledSrcBmp = bmp;
		Bitmap output = Bitmap.createBitmap(scaledSrcBmp.getWidth(),
				scaledSrcBmp.getHeight(), Config.ARGB_8888);
		Canvas canvas = new Canvas(output);

		final Paint paint = new Paint();
		final Rect rect = new Rect(0, 0, scaledSrcBmp.getWidth(),
				scaledSrcBmp.getHeight());

		paint.setAntiAlias(true);
		paint.setFilterBitmap(true);
		paint.setDither(true);
		canvas.drawARGB(0, 0, 0, 0);
		paint.setColor(Color.parseColor("#BAB399"));
		canvas.drawCircle(scaledSrcBmp.getWidth() / 2,
				scaledSrcBmp.getHeight() / 2, scaledSrcBmp.getWidth() / 2,
				paint);
		paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
		canvas.drawBitmap(scaledSrcBmp, rect, rect, paint);
		return output;
	}

	private boolean isDraw = false;

	@SuppressLint("DrawAllocation")
	@Override
	protected void onDraw(Canvas canvas) {
		Drawable drawable = getDrawable();
		if (drawable == null) {
			return;
		}
		if (getWidth() == 0 || getHeight() == 0) {
			return;
		}
		this.measure(0, 0);
		if (drawable.getClass() == NinePatchDrawable.class)
			return;
		Bitmap b = ((BitmapDrawable) drawable).getBitmap();
		Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
		int w = getWidth(), h = getHeight();
		int radius = (w < h ? w : h) / 2 - mBorderThickness-1;
		Bitmap roundBitmap = getCroppedBitmap(bitmap, radius);
		final Paint paint = new Paint();
		paint.setAntiAlias(true);
		paint.setFilterBitmap(true);
		paint.setDither(true);
		
		
		
		paint.setColor(android.graphics.Color.GREEN);
		canvas.drawCircle(w / 2, h / 2, radius + mBorderThickness+1, paint);
		paint.setColor(mBorderColor);
		// 外围边框
		canvas.drawCircle(w / 2, h / 2, radius + mBorderThickness, paint);
		canvas.drawBitmap(roundBitmap, w / 2 - radius, h / 2 - radius, null);
		
		if(isInEditMode()){
			mpaint.setColor(mSlidercolor);
			mpaint.setStrokeWidth(mBorderThickness);
			mpaint.setAntiAlias(true);
			mpaint.setDither(true);
			RectF rect2 = new RectF(w/2-radius-2,h/2-radius-2, getWidth() - mBorderThickness,getHeight() - mBorderThickness);
			//RectF rect2=new RectF(2,2,(radius + mBorderThickness)*2-2,(radius + mBorderThickness)*2-2);
			
			
			canvas.drawArc(rect2,270, 30, false, mpaint);
			canvas.drawArc(rect2,90, 30, false, mpaint);
			canvas.drawArc(rect2,0, 30, false, mpaint);
			canvas.drawArc(rect2,180, 30, false, mpaint);
			canvas.drawArc(rect2,45, 30, false, mpaint);
			canvas.drawArc(rect2,135, 30, false, mpaint);
			canvas.drawArc(rect2,225, 30, false, mpaint);
			canvas.drawArc(rect2,315, 30, false, mpaint);
		}
		
		if (!isDraw) {
			mpaint.setColor(mSlidercolor);
			mpaint.setStrokeWidth(mBorderThickness);
			mpaint.setAntiAlias(true);
			mpaint.setDither(true);
			RectF rect2 = new RectF(w/2-radius-2,h/2-radius-2, getWidth() - mBorderThickness,getHeight() - mBorderThickness);
			//RectF rect2=new RectF(2,2,(radius + mBorderThickness)*2-2,(radius + mBorderThickness)*2-2);
			canvas.drawArc(rect2, startAngle, 20, false, mpaint);
			startAngle += 5;
			if (startAngle == 360)
				startAngle = 0;
			if (isStart) {
				// super.onDraw(canvas);
				isDraw = false;
				invalidate();
			}
		}
	}
	

	private boolean isStart = true;

	Object mObject = new Object();

	public void Start() {
		synchronized (mObject) {
			isStart = true;
			isDraw = false;
			invalidate();
		}
	}

	public void Stop() {
		synchronized (mObject) {
			isStart = false;
			isDraw = true;
			invalidate();
		}
	}

	public static int dip2px(Context context, float dpValue) {
		final float scale = context.getResources().getDisplayMetrics().density;
		return (int) (dpValue * scale + 0.5f);
	}
}

前一篇实现上一个效果,这篇实现底下的效果

调用的话就:

public class Main extends Activity {

	private DrawImageView mDrawImageView=null;
	private RotateUpdatedViewEx mEx=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.pop);
		mDrawImageView=(DrawImageView) findViewById(R.id.drawImageView1);
		mEx=(RotateUpdatedViewEx) findViewById(R.id.rotateUpdatedViewEx1);
		((Button) findViewById(R.id.button1))
				.setOnClickListener(new View.OnClickListener() {
					@Override
					public void onClick(View v) {
						mDrawImageView.Start();
						mEx.Start();
					}
				});
		((Button) findViewById(R.id.button2))
		.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mDrawImageView.Stop();
				mEx.Stop();
			}
		});
		((Button)findViewById(R.id.button3)).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				mEx.setImageDrawable(getResources().getDrawable(R.drawable.xiaohei));
			}
		});
	}
}


下载:http://download.csdn.net/detail/fuweiping/6440451

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值