自定义View
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
public class MyView extends View{
private final int width=100;
private final int height=100;
public static final int drawCircle=1;
public static final int drawRound=2;
private Bitmap head;
private int drawType;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(createHead(width,height,drawType), 0, 0, null);
}
private Bitmap createHead(int width,int height,int drawType) {
Bitmap bitmap=Bitmap.createBitmap(width, height, Config.ARGB_8888);
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
Canvas canvas=new Canvas(bitmap);
Matrix matrix=new Matrix();
Log.i("TAG", head.getWidth()+"----"+bitmap.getWidth());
float scaleWidth=(float)bitmap.getWidth()/(float)head.getWidth();
float scaleHeight=(float)bitmap.getHeight()/(float)head.getHeight();
matrix.setScale(scaleWidth, scaleHeight, 0, 0);
canvas.drawBitmap(head,matrix, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
if(drawType==drawCircle)
canvas.drawBitmap(createCircle(width,height), 0, 0, paint);
if(drawType==drawRound)
canvas.drawBitmap(createRoundCircle(width,height), 0, 0, paint);
return bitmap;
}
private Bitmap createCircle(int width,int height) {
Bitmap bitmap=Bitmap.createBitmap(width, height, Config.ARGB_8888);
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setColor(Color.RED);
Canvas canvas=new Canvas(bitmap);
canvas.drawCircle(width/2, width/2, width/2, paint);
return bitmap;
}
private Bitmap createRoundCircle(int width,int height) {
Bitmap bitmap=Bitmap.createBitmap(width, height, Config.ARGB_8888);
Paint paint=new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setColor(Color.RED);
Canvas canvas=new Canvas(bitmap);
RectF rectF=new RectF(0, 0, width, height);
canvas.drawRoundRect(rectF, 30f, 30f, paint);
return bitmap;
}
public void setBitmap(Bitmap bitmap,int drawType){
this.head=bitmap;
this.drawType=drawType;
}
}
主页调用
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyView myView=(MyView) findViewById(R.id.myView);
Bitmap head = BitmapFactory.decodeResource(getResources(), R.drawable.k11446);
myView.setBitmap(head,MyView.drawCircle);
}
}
布局
<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"
tools:context="${relativePackage}.${activityClass}" >
<com.e.y.MyView
android:id="@+id/myView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>