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

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

首先看一下效果图:

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

MainActivity:

[java] view plain copy

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

WaterRipplesView:

[java] view plain copy

    1. package com.tony.testshader;
    2. import android.content.Context;
    3. import android.graphics.Bitmap;
    4. import android.graphics.BitmapShader;
    5. import android.graphics.Canvas;
    6. import android.graphics.Color;
    7. import android.graphics.Paint;
    8. import android.graphics.RadialGradient;
    9. import android.graphics.Shader;
    10. import android.graphics.drawable.BitmapDrawable;
    11. import android.graphics.drawable.ShapeDrawable;
    12. import android.graphics.drawable.shapes.OvalShape;
    13. import android.util.AttributeSet;
    14. import android.util.DisplayMetrics;
    15. import android.view.MotionEvent;
    16. import android.view.View;
    17. /**
    18. * 水波纹效果
    19. * @author tony
    20. *
    21. */
    22. public class WaterRipplesView extends View {
    23. Shader mBitmapShader = null;
    24. Bitmap mBitmapPn = null;
    25. Paint mPaint = null;
    26. Shader mRadialGradient = null;
    27. Canvas mCanvas = null;
    28. ShapeDrawable mShapeDrawable = null;
    29. public WaterRipplesView(Context context) {
    30. super(context);
    31. // 初始化工作
    32. Bitmap bitmapTemp = ((BitmapDrawable) getResources().getDrawable(
    33. R.drawable.leaf)).getBitmap();
    34. DisplayMetrics dm = getResources().getDisplayMetrics();
    35. // 创建与当前使用的设备窗口大小一致的图片
    36. mBitmapPn = Bitmap.createScaledBitmap(bitmapTemp, dm.widthPixels,
    37. dm.heightPixels, true);
    38. // 创建BitmapShader object
    39. mBitmapShader = new BitmapShader(mBitmapPn, Shader.TileMode.REPEAT,
    40. Shader.TileMode.MIRROR);
    41. mPaint = new Paint();
    42. }
    43. public WaterRipplesView(Context context, AttributeSet attrs) {
    44. super(context, attrs);
    45. }
    46. @Override
    47. protected void onDraw(Canvas canvas) {
    48. // TODO Auto-generated method stub
    49. super.onDraw(canvas);
    50. // 将图片裁剪为椭圆型
    51. // 创建ShapeDrawable object,并定义形状为椭圆
    52. mShapeDrawable = new ShapeDrawable(new OvalShape());// OvalShape:椭圆
    53. // 设置要绘制的椭圆形的东西为ShapeDrawable图片
    54. mShapeDrawable.getPaint().setShader(mBitmapShader);
    55. // 设置显示区域
    56. mShapeDrawable.setBounds(0, 0, mBitmapPn.getWidth(),
    57. mBitmapPn.getHeight());
    58. // 绘制ShapeDrawable
    59. mShapeDrawable.draw(canvas);
    60. if (mRadialGradient != null) {
    61. mPaint.setShader(mRadialGradient);
    62. canvas.drawCircle(0, 0, 1000, mPaint);
    63. }
    64. }
    65. // @覆写触摸屏事件
    66. public boolean onTouchEvent(MotionEvent event) {
    67. // @设置alpha通道(透明度)
    68. mPaint.setAlpha(400);
    69. mRadialGradient = new RadialGradient(event.getX(), event.getY(), 48,
    70. new int[] { Color.WHITE, Color.TRANSPARENT },null, Shader.TileMode.REPEAT);
    71. // @重绘
    72. postInvalidate();
    73. return true;
    74. }
    75. }
时间: 2024-08-05 10:50:07

Android 颜色渲染(七) RadialGradient 环形渲染实现水波纹效果的相关文章

Android 颜色渲染(六) RadialGradient 环形渲染

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(六) RadialGradient 环形渲染 public RadialGradient(float x, float y, float radius, int[] colors, float[] positions,Shader.TileMode tile) float x:  圆心X坐标 float y:  圆心Y坐标 float radius: 半径 int[] colors:  渲染颜色数组

Android特效专辑(十)——点击水波纹效果实现,逻辑清晰实现简单

Android特效专辑(十)--点击水波纹效果实现,逻辑清晰实现简单 这次做的东西呢,和上篇有点类似,就是用比较简单的逻辑思路去实现一些比较好玩的特效,最近也是比较忙,所以博客更新的速度还得看时间去推演,但是也能保证一周三更的样子,现在也还是以小功能,或者说是一些小入门级别的博客为主,我也不算是什么很厉害的人,很多细节的支持处理的仍然还是不到位,所以也是一直在弥补,话不多说,来看看今天的效果 实现起来很简单吧,那我们就来看一下他是怎么实现的咯! OnclickRuning package com

Android自定义控件-Path之贝赛尔曲线和手势轨迹、水波纹效果

从这篇开始,我将延续androidGraphics系列文章把图片相关的知识给大家讲完,这一篇先稍微进阶一下,给大家把<android Graphics(二):路径及文字>略去的quadTo(二阶贝塞尔)函数,给大家补充一下. 本篇最终将以两个例子给大家演示贝塞尔曲线的强大用途: 1.手势轨迹 利用贝塞尔曲线,我们能实现平滑的手势轨迹效果 2.水波纹效果 电池充电时,有些手机会显示水波纹效果,就是这样做出来的. 废话不多说,开整吧 一.概述 在<android Graphics(二):路径

[转]Android自定义控件系列五:自定义绚丽水波纹效果

出处:http://www.2cto.com/kf/201411/353169.html 今天我们来利用Android自定义控件实现一个比较有趣的效果:滑动水波纹.先来看看最终效果图: 图一 效果还是很炫的:饭要一口口吃,路要一步步走,这里我们将整个过程分成几步来实现 一.实现单击出现水波纹单圈效果: 图二 照例来说,还是一个自定义控件,这里我们直接让这个控件撑满整个屏幕(对自定义控件不熟悉的可以参看我之前的一篇文章:Android自定义控件系列二:自定义开关按钮(一)).观察这个效果,发现应该

Android自定义控件系列五:自定义绚丽水波纹效果

尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自定义控件实现一个比较有趣的效果:滑动水波纹.先来看看最终效果图: 图一 效果还是很炫的:饭要一口口吃,路要一步步走,这里我们将整个过程分成几步来实现 一.实现单击出现水波纹单圈效果: 图二 照例来说,还是一个自定义控件,这里我们直接让这个控件撑满整个屏幕(对自定义控件不熟悉的可以参看我之前的一篇文章:Android自定义控件系列二

Android 自定义view实现水波纹效果

http://blog.csdn.net/tianjian4592/article/details/44222565 在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果,兴致高昂的来找你,看了之后目的很明确,当然就是希望你能给她: 在这样的关键时候,身子板就一定得硬了,可千万别说不行,爷们儿怎么能说不行呢: 好了,为了让大家都能给妹纸们想要的,后面会逐渐分享一些比较比较不错的效果,目的只有一个,通过自定义view实现我们所能实现的动效: 今天主要分

兼容Android的水波纹效果

Android的水波纹效果只有高版本才有,我们希望自己的应用在低版本用低版本的阴影,高版本用水波纹,这怎么做呢?其实,只要分drawable和drawablev21两个文件夹就好了. 普通情况下的selector: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"&

Android 实现RippleEffect水波纹效果

最近看到360.UC.网易新闻客户端都应用了水波纹效果,就在私下里也研究了一下,参照GIT上大神的分享,自己也跟着做了一个示例,下面先看效果: 1.RippleEffect核心实现类 package com.example.RippleEffect; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphi

Android Ripple 按钮水波纹效果(二)优化

上一篇中我们讲了自定义ripple 水波纹效果,先来回顾一下效果吧! 看了以后感觉没甚么问题,我一开始也觉得很满意了,那好,我们拿Android 5.0自带的效果来对比一下 发现了不同之处没?点击中间的时候是看不出什么区别,但是点击两边的时候,就很明显了,我们自定义的效果,波纹向两边同速度的扩散,所以就会出现,如果点击点不在中心的时候,距离短的一边波纹先到达,而距离长的一边后到达,不能同时到达边缘!而系统自带的则不存在这种情况,所以这是一个优化点;另一个优化点是:我们自定义的效果,在波纹全部覆盖