package com.com.mr_wrong.CustomView.Shader;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;
import com.Utils.ScreenUtils;
import com.example.mr_wrong.androidstudioproject.R;
/**
* Created by Mr_Wrong on 15/8/25.
* 倒影图像
*/
public class ReflectView extends View {
private Paint mPaint;
private Bitmap mSrcBitmap, mRefBitmap;
private PorterDuffXfermode xfermode;
private int x, y;
private Paint paint;
public ReflectView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mSrcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_header_logo);
Matrix matrix = new Matrix();
matrix.setScale(1f, -1f);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(5);
mRefBitmap = Bitmap.createBitmap(mSrcBitmap, 0, 0, mSrcBitmap.getWidth(), mSrcBitmap.getHeight(), matrix, true);
x = ScreenUtils.getScreenWidth(context) / 2 - mSrcBitmap.getWidth() / 2;
y = ScreenUtils.getScreenHeight(context) / 2 - mSrcBitmap.getHeight() / 2;
mPaint.setShader(new LinearGradient(x, y + mSrcBitmap.getHeight(),
x, y + mSrcBitmap.getHeight() + mSrcBitmap.getHeight() / 4,
0xAA000000, Color.TRANSPARENT, Shader.TileMode.CLAMP));
//这里是把y轴给拉伸了 所以看不到下面的3/4了
//如果是渐变加上REPEAT 会有一种百叶窗的效果 还是挺好的
xfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(mSrcBitmap, x, y, null);
int sc = canvas.saveLayer(x, y + mSrcBitmap.getHeight(),
x + mRefBitmap.getWidth(), y + mSrcBitmap.getHeight() * 2,
null, Canvas.ALL_SAVE_FLAG);
canvas.drawBitmap(mRefBitmap, x, y + mSrcBitmap.getHeight(), null);
mPaint.setXfermode(xfermode);
canvas.drawRect(x, y + mSrcBitmap.getHeight(), x + mRefBitmap.getWidth(), y + mSrcBitmap.getHeight() * 2, mPaint);
canvas.drawRect(x, y + mSrcBitmap.getHeight(), x + mRefBitmap.getWidth(), y + mSrcBitmap.getHeight() * 2, paint);
mPaint.setXfermode(null);
canvas.restoreToCount(sc);
}
}