package com.roboo.like.netease.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RadialGradient; import android.graphics.Shader; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import com.roboo.like.netease.R; public class WaterWaveView extends View { private Shader mShader; private Bitmap mBitmap; private Paint mPaint; private ShapeDrawable mShapeDrawable; public WaterWaveView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public WaterWaveView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public WaterWaveView(Context context) { super(context); init(); } private void init() { Bitmap tmpBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.ic_surface_view_image)).getBitmap(); mBitmap = Bitmap.createScaledBitmap(tmpBitmap, getResources().getDisplayMetrics().widthPixels, getResources().getDisplayMetrics().heightPixels, true); mPaint = new Paint(); mShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR); // 将图片裁剪为椭圆型 // 创建ShapeDrawable object,并定义形状为椭圆 mShapeDrawable = new ShapeDrawable(new OvalShape()); //mShapeDrawable.setAlpha(0x00000000); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mBitmap, 0, 0, mPaint); // 设置要绘制的椭圆形的东西为ShapeDrawable图片 mShapeDrawable.getPaint().setShader(mShader); // 设置显示区域 mShapeDrawable.setBounds(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); // 绘制ShapeDrawable mShapeDrawable.draw(canvas); if (mShader != null) { mPaint.setShader(mShader); canvas.drawCircle(0, 0, 1000, mPaint); } } // 覆写触摸屏事件 public boolean onTouchEvent(MotionEvent event) { // @设置alpha通道(透明度) mPaint.setAlpha(400); mShader = new RadialGradient(event.getX(), event.getY(), 48, new int[] { Color.WHITE, Color.TRANSPARENT }, null, Shader.TileMode.REPEAT); // @重绘 postInvalidate(); return true; } }