您的位置:首页 > 移动开发 > Android开发

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

2016-03-18 14:41 736 查看
转自:http://blog.csdn.net/t12x3456/article/details/10711779

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

首先看一下效果图:



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

MainActivity:

[java] view
plain copy

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:

[java] view
plain copy

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 object

mBitmapShader = new BitmapShader(mBitmapPn, Shader.TileMode.REPEAT,

Shader.TileMode.MIRROR);

mPaint = new Paint();

}

public WaterRipplesView(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

// 将图片裁剪为椭圆型

// 创建ShapeDrawable object,并定义形状为椭圆

mShapeDrawable = new ShapeDrawable(new OvalShape());// OvalShape:椭圆

// 设置要绘制的椭圆形的东西为ShapeDrawable图片

mShapeDrawable.getPaint().setShader(mBitmapShader);

// 设置显示区域

mShapeDrawable.setBounds(0, 0, mBitmapPn.getWidth(),

mBitmapPn.getHeight());

// 绘制ShapeDrawable

mShapeDrawable.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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: