一:自定义drawable实现绘制圆形图片
二:自定义drawable
package com.example.kirito.myapplication.testdrawable;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
/**
* Created by kirito on 2016.10.31.
*/
public class CircleDrawable extends Drawable {
private Paint mPaint;
private int mWidth;
public CircleDrawable(Bitmap mBitmap) {
mPaint = new Paint();
mPaint.setAntiAlias(true);
BitmapShader shader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(shader);
mWidth = Math.min(mBitmap.getWidth(),mBitmap.getHeight());
}
@Override
public void draw(Canvas canvas) {
//半径要写正确!
canvas.drawCircle(mWidth / 2,mWidth / 2,mWidth / 2,mPaint);
}
@Override
public void setAlpha(int alpha) {
mPaint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
mPaint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public int getIntrinsicHeight() {
//返回实际高度
return mWidth;
}
@Override
public int getIntrinsicWidth() {
return mWidth;
}
}
三:布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/iv_testdraw"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
四:activity
package com.example.kirito.myapplication.testdrawable;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.example.kirito.myapplication.R;
/**
* Created by kirito on 2016.10.31.
*/
public class TestDrawable extends AppCompatActivity {
private ImageView iv;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.testdrawable);
iv = (ImageView) findViewById(R.id.iv_testdraw);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.lamp_on);
CircleDrawable drawable = new CircleDrawable(bitmap);
iv.setImageDrawable(drawable);
}
}
五:效果图
六:实现有圆角的矩形图片
只需修改自定义代码
package com.example.kirito.myapplication.testdrawable;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
/**
* Created by kirito on 2016.10.31.
*/
public class CircleDrawable extends Drawable {
private Paint mPaint;
private Bitmap mBitmap;
private RectF rectF;
public CircleDrawable(Bitmap mBitmap) {
mPaint = new Paint();
mPaint.setAntiAlias(true);
this.mBitmap = mBitmap;
BitmapShader shader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(shader);
}
@Override
public void draw(Canvas canvas) {
canvas.drawRoundRect(rectF,30,30,mPaint);
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
rectF = new RectF(left,top,right,bottom);
}
@Override
public void setAlpha(int alpha) {
mPaint.setAlpha(alpha);
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
mPaint.setColorFilter(colorFilter);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public int getIntrinsicHeight() {
//返回实际高度
return mBitmap.getHeight();
}
@Override
public int getIntrinsicWidth() {
return mBitmap.getWidth();
}
}
七:效果图