先上效果图 图1
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.streffy.toumingDemo.MainActivity">
<com.streffy.toumingDemo.MyView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
package com.streffy.toumingDemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.util.AttributeSet;
import android.view.View;
public class MyView extends View {
private Bitmap mSrcBitmap;//, mMaskBitmap
public int position;
private Context mContext;
// private RectF mSrcRect, mDestRect;
public MyView(Context context) {
super(context);
mContext = context;
// TODO Auto-generated constructor stub
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
mContext = context;
}
PaintFlagsDrawFilter mDrawFilter;
PorterDuffXfermode mPorterDuffXfermode;
Paint mPaint;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG);
mPorterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.XOR);
mDrawFilter = new PaintFlagsDrawFilter(Paint.ANTI_ALIAS_FLAG,
Paint.DITHER_FLAG);
}
RectF srcRect;//, dstRect
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// int width = w <= h ? w : h;
// int centerX = w/2;
// int centerY = h/2;
// int quarterWidth = width /4;
// srcRect = new RectF(centerX-quarterWidth, centerY-quarterWidth, centerX+quarterWidth, centerY+quarterWidth);
// dstRect = new RectF(centerX-quarterWidth, centerY-quarterWidth, centerX+quarterWidth, centerY+quarterWidth);
srcRect = new RectF(0, 0, w, h);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
initBitmap();
super.onDraw(canvas);
canvas.drawColor(Color.TRANSPARENT);
int saveCount = canvas.saveLayer(srcRect, mPaint, Canvas.ALL_SAVE_FLAG);
int circleRadius = 200;//圆的半径
int verticalCenter = getHeight() / 2;
int horizontalCenter = getWidth() / 2;
Paint paint = new Paint();
paint.setAntiAlias(false);
paint.setColor(Color.RED);
canvas.drawCircle(horizontalCenter, verticalCenter, circleRadius, paint);
mPaint.setXfermode(mPorterDuffXfermode);
canvas.drawBitmap(mSrcBitmap, null, srcRect, mPaint);
mPaint.setXfermode(null);
canvas.restoreToCount(saveCount);
}
private void initBitmap() {
mSrcBitmap = ((BitmapDrawable) getResources().getDrawable(
R.mipmap.ap1)).getBitmap();
}
}
package com.streffy.toumingDemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}