Android 颜色渲染(七) RadialGradient 环形渲染实现水波纹效果

来源:互联网 发布:捏人设的软件 网站 编辑:程序博客网 时间:2024/05/10 03:50

利用环形渲染我们可以做到什么? 其实很多都是非常常见的,比如上一篇实现的帮帮糖效果, 彩色的热气球,比如这里要讲到的水波纹效果,或者也可以理解为扩散色渲染效果

首先看一下效果图:

                                                    

轻触屏幕,即可看到对应的效果,可以看到,实现这种效果,利用RadialGradient ,只需简单几行代码:

MainActivity:

package com.tony.testshader;import android.os.Bundle;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.Menu;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;public class MainActivity extends Activity  implements OnSeekBarChangeListener{     private WaterRipplesView waterRipplesView;                  @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);                waterRipplesView = new WaterRipplesView(this);        setContentView(waterRipplesView);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }  }

WaterRipplesView:

package com.tony.testshader;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.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;/** * 水波纹效果 * @author tony * */ public class WaterRipplesView extends View {Shader mBitmapShader = null;Bitmap mBitmapPn = null;Paint mPaint = null;Shader mRadialGradient = null;Canvas mCanvas = null;ShapeDrawable mShapeDrawable = null;public WaterRipplesView(Context context) {super(context);// 初始化工作Bitmap bitmapTemp = ((BitmapDrawable) getResources().getDrawable(R.drawable.leaf)).getBitmap();DisplayMetrics dm = getResources().getDisplayMetrics();// 创建与当前使用的设备窗口大小一致的图片mBitmapPn = Bitmap.createScaledBitmap(bitmapTemp, dm.widthPixels,dm.heightPixels, true);// 创建BitmapShader objectmBitmapShader = new BitmapShader(mBitmapPn, Shader.TileMode.REPEAT,Shader.TileMode.MIRROR);mPaint = new Paint();}public WaterRipplesView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);// 将图片裁剪为椭圆型// 创建ShapeDrawable object,并定义形状为椭圆mShapeDrawable = new ShapeDrawable(new OvalShape());// OvalShape:椭圆// 设置要绘制的椭圆形的东西为ShapeDrawable图片mShapeDrawable.getPaint().setShader(mBitmapShader);// 设置显示区域mShapeDrawable.setBounds(0, 0, mBitmapPn.getWidth(),mBitmapPn.getHeight());// 绘制ShapeDrawablemShapeDrawable.draw(canvas);if (mRadialGradient != null) {mPaint.setShader(mRadialGradient);canvas.drawCircle(0, 0, 1000, mPaint);}}// @覆写触摸屏事件public boolean onTouchEvent(MotionEvent event) {// @设置alpha通道(透明度)mPaint.setAlpha(400);mRadialGradient = new RadialGradient(event.getX(), event.getY(), 48,new int[] { Color.WHITE, Color.TRANSPARENT },null, Shader.TileMode.REPEAT);// @重绘postInvalidate();return true;}}



原创粉丝点击