自定义View
XfermodeView.java
package com.example.day0119;
import java.util.Formatter.BigDecimalLayoutForm;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class XfermodeView extends View{
private Paint mPaint;
private Canvas mCanvas;
private Path mPath;
private Bitmap mBgBitmap,mFgBitmap;
public XfermodeView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setAlpha(0);//透明
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);//笔头设置为圆形
mPaint.setStrokeCap(Paint.Cap.ROUND);//笔尾设置为圆形
mPaint.setAntiAlias(true);
mPaint.setStrokeWidth(50);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));//显示交错的下层图片
mPath = new Path();
mBgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.bmp);
mFgBitmap = Bitmap.createBitmap(mBgBitmap.getWidth(), mBgBitmap.getHeight(), Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mFgBitmap);
mCanvas.drawColor(Color.GRAY);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mBgBitmap, 0, 0, null);
canvas.drawBitmap(mFgBitmap, 0, 0, null);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mPath.reset();
mPath.moveTo(event.getX(), event.getY());
break;
case MotionEvent.ACTION_MOVE :
mPath.lineTo(event.getX(), event.getY());
break;
}
mCanvas.drawPath(mPath, mPaint);
invalidate();
return true;
}
}
xml
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" >
<com.example.day0119.XfermodeView
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
效果