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

来源:互联网 发布:增值税发票抵扣软件 编辑:程序博客网 时间:2024/06/02 07:31
 

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

分类: Android Android 颜色渲染 314人阅读 评论(1) 收藏 举报

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

首先看一下效果图:

                                                     

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

MainActivity:

[java] view plaincopy
  1. package com.tony.testshader;  
  2.   
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.graphics.Bitmap;  
  6. import android.graphics.BitmapFactory;  
  7. import android.view.Menu;  
  8. import android.widget.SeekBar;  
  9. import android.widget.SeekBar.OnSeekBarChangeListener;  
  10.   
  11. public class MainActivity extends Activity  implements OnSeekBarChangeListener{  
  12.   
  13.      private WaterRipplesView waterRipplesView;  
  14.        
  15.        
  16.       
  17.     @Override  
  18.     protected void onCreate(Bundle savedInstanceState) {  
  19.         super.onCreate(savedInstanceState);  
  20.   
  21.           
  22.         waterRipplesView = new WaterRipplesView(this);  
  23.         setContentView(waterRipplesView);  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean onCreateOptionsMenu(Menu menu) {  
  28.         getMenuInflater().inflate(R.menu.main, menu);  
  29.         return true;  
  30.     }  
  31.   
  32.     
  33.   
  34. }  

WaterRipplesView:

[java] view plaincopy
  1. package com.tony.testshader;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.BitmapShader;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Paint;  
  9. import android.graphics.RadialGradient;  
  10. import android.graphics.Shader;  
  11. import android.graphics.drawable.BitmapDrawable;  
  12. import android.graphics.drawable.ShapeDrawable;  
  13. import android.graphics.drawable.shapes.OvalShape;  
  14. import android.util.AttributeSet;  
  15. import android.util.DisplayMetrics;  
  16. import android.view.MotionEvent;  
  17. import android.view.View;  
  18. /** 
  19.  * 水波纹效果 
  20.  * @author tony 
  21.  * 
  22.  */  
  23.   
  24.  public class WaterRipplesView extends View {  
  25.   
  26.     Shader mBitmapShader = null;  
  27.     Bitmap mBitmapPn = null;  
  28.     Paint mPaint = null;  
  29.     Shader mRadialGradient = null;  
  30.     Canvas mCanvas = null;  
  31.     ShapeDrawable mShapeDrawable = null;  
  32.   
  33.     public WaterRipplesView(Context context) {  
  34.         super(context);  
  35.   
  36.         // 初始化工作  
  37.         Bitmap bitmapTemp = ((BitmapDrawable) getResources().getDrawable(  
  38.                 R.drawable.leaf)).getBitmap();  
  39.         DisplayMetrics dm = getResources().getDisplayMetrics();  
  40.         // 创建与当前使用的设备窗口大小一致的图片  
  41.         mBitmapPn = Bitmap.createScaledBitmap(bitmapTemp, dm.widthPixels,  
  42.                 dm.heightPixels, true);  
  43.         // 创建BitmapShader object  
  44.         mBitmapShader = new BitmapShader(mBitmapPn, Shader.TileMode.REPEAT,  
  45.                 Shader.TileMode.MIRROR);  
  46.         mPaint = new Paint();  
  47.     }  
  48.   
  49.     public WaterRipplesView(Context context, AttributeSet attrs) {  
  50.         super(context, attrs);  
  51.     }  
  52.   
  53.     @Override  
  54.     protected void onDraw(Canvas canvas) {  
  55.         // TODO Auto-generated method stub  
  56.         super.onDraw(canvas);  
  57.   
  58.         // 将图片裁剪为椭圆型  
  59.         // 创建ShapeDrawable object,并定义形状为椭圆  
  60.         mShapeDrawable = new ShapeDrawable(new OvalShape());// OvalShape:椭圆  
  61.         // 设置要绘制的椭圆形的东西为ShapeDrawable图片  
  62.         mShapeDrawable.getPaint().setShader(mBitmapShader);  
  63.         // 设置显示区域  
  64.         mShapeDrawable.setBounds(00, mBitmapPn.getWidth(),  
  65.                 mBitmapPn.getHeight());  
  66.         // 绘制ShapeDrawable  
  67.         mShapeDrawable.draw(canvas);  
  68.         if (mRadialGradient != null) {  
  69.             mPaint.setShader(mRadialGradient);  
  70.             canvas.drawCircle(001000, mPaint);  
  71.         }  
  72.   
  73.     }  
  74.   
  75.     // @覆写触摸屏事件  
  76.     public boolean onTouchEvent(MotionEvent event) {  
  77.         // @设置alpha通道(透明度)  
  78.         mPaint.setAlpha(400);  
  79.         mRadialGradient = new RadialGradient(event.getX(), event.getY(), 48,  
  80.                 new int[] { Color.WHITE, Color.TRANSPARENT },null, Shader.TileMode.REPEAT);  
  81.         // @重绘  
  82.         postInvalidate();  
  83.         return true;  
  84.     }  
  85.   
  86. }  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东取消订单商家总不取消怎么办 京东快递退货取件一直取不到怎么办 在京东线上付款了但没收到货怎么办 寄快递收件人电话号码写错了怎么办 京东购物实名认证被别人占用怎么办 货已发出单号还没填买家退货怎么办 自提柜还有一个包忘记拿怎么办 当顾客说衣服太贵的时候怎么办 京东快递送错了被别人签收了怎么办 乐视1s玩王者荣耀卡怎么办 京东商城买东西发现地址错了怎么办 京东分期付款买手机额度不够怎么办 亮皮银色高跟鞋时间放久变色怎么办 饿了么商家钱包提现被锁了怎么办 在淘手游买的游戏账号被找回怎么办 交易猫买手游梦幻号被找回了怎么办 绑定着苹果账号的邮箱忘记了怎么办 京东注册账号跟密码都忘记了怎么办 孩子大学一个宿舍宿友不行怎么办 微信手机支付密码忘记了怎么办 微信公众号不能付款了怎么办 头条误点了投放头条广告怎么办 交行网银密码错误6次怎么办 宁波新冮厦关门我们的消费卡怎么办 第一天上班别人教的学不会怎么办 老公出轨已经不想跟你爱爱了怎么办 妻子出轨丈夫为了孩子不离婚怎么办 妻子出轨分居死也不愿意离婚怎么办 拼多多个人卖家登录密码忘了怎么办 微信被限制添加更多订阅号了怎么办 知网复制粘贴的论文有格式怎么办 知网论文查询网站密码忘记了怎么办 开通了超级会员不能克隆好友怎么办 偷了家里好多钱去买手机了怎么办 中行信用卡短信邀请办白金卡怎么办 注册邮箱说邮箱地址已被注册怎么办 便利店开在小区里面没生意怎么办 微信支付密码忘了怎么办没银行卡 中行5月扣很多钱是怎么办 中银淘宝校园卡影响征信问题怎么办 中银E盾快到期了怎么办