Android 颜色渲染(四) BitmapShader位图渲染

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

Android 颜色处理(四) BitmapShader位图渲染

public   BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY)

调用这个方法来产生一个画有一个位图的渲染器(Shader)。

bitmap   在渲染器内使用的位图

tileX      The tiling mode for x to draw the bitmap in.   在位图上X方向渲染器平铺模式

tileY     The tiling mode for y to draw the bitmap in.    在位图上Y方向渲染器平铺模式

TileMode:

CLAMP  :如果渲染器超出原始边界范围,会复制范围内边缘染色。

REPEAT :横向和纵向的重复渲染器图片,平铺。

MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT重复方式不一样,他是以镜像方式平铺。

首先看一下效果图:

还是直接上代码:

MainActivity:

[java] view plain copy

  1. package com.tony.shader;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. public class MainActivity extends Activity {
  5. private BitmapShaderView shaderView;
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. shaderView = new BitmapShaderView(this);
  10. setContentView(shaderView);
  11. }
  12. }

BitmapShaderView:

[java] view plain copy

    1. package com.tony.shader;
    2. import android.content.Context;
    3. import android.graphics.Bitmap;
    4. import android.graphics.BitmapShader;
    5. import android.graphics.Canvas;
    6. import android.graphics.Paint;
    7. import android.graphics.Shader;
    8. import android.graphics.drawable.BitmapDrawable;
    9. import android.graphics.drawable.ShapeDrawable;
    10. import android.graphics.drawable.shapes.OvalShape;
    11. import android.util.AttributeSet;
    12. import android.view.View;
    13. public class BitmapShaderView extends View {
    14. private BitmapShader bitmapShader = null;
    15. private Bitmap bitmap = null;
    16. private Paint paint = null;
    17. private ShapeDrawable shapeDrawable = null;
    18. private int BitmapWidth = 0;
    19. private int BitmapHeight = 0;
    20. public BitmapShaderView(Context context) {
    21. super(context);
    22. // 得到图像
    23. bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.cat))
    24. .getBitmap();
    25. BitmapWidth = bitmap.getWidth();
    26. BitmapHeight = bitmap.getHeight();
    27. // 构造渲染器BitmapShader
    28. bitmapShader = new BitmapShader(bitmap, Shader.TileMode.MIRROR,Shader.TileMode.REPEAT);
    29. }
    30. public BitmapShaderView(Context context,AttributeSet set) {
    31. super(context, set);
    32. }
    33. @Override
    34. protected void onDraw(Canvas canvas) {
    35. // TODO Auto-generated method stub
    36. super.onDraw(canvas);
    37. //将图片裁剪为椭圆形
    38. //构建ShapeDrawable对象并定义形状为椭圆
    39. shapeDrawable = new ShapeDrawable(new OvalShape());
    40. //得到画笔并设置渲染器
    41. shapeDrawable.getPaint().setShader(bitmapShader);
    42. //设置显示区域
    43. shapeDrawable.setBounds(20, 20,BitmapWidth-140,BitmapHeight);
    44. //绘制shapeDrawable
    45. shapeDrawable.draw(canvas);
    46. }
    47. }
时间: 2024-12-17 19:30:07

Android 颜色渲染(四) BitmapShader位图渲染的相关文章

Android 颜色渲染(十) ComposeShader组合渲染

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(十) ComposeShader组合渲染 public ComposeShader(Shader shaderA,Shader shaderB, Xfermode mode) Parameters shaderA 渲染器A,Shader及其子类对象 shaderB 渲染器B,Shader及其子类对象 mode  两种渲染器组合的模式,Xfermode对象 public ComposeShader(S

Android 颜色渲染(五) LinearGradient线性渲染

版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色处理(五) LinearGradient线性渲染 相信很多人都看过歌词同步的效果, 一是竖直方向的滚动,另一方面是水平方面的歌词颜色渐变点亮效果,这种效果怎么做呢? 这就需要用到LinearGradient线性渲染,下面还是先看具体的使用: LinearGradient有两个构造函数; public LinearGradient(float x0, float y0, float x1, float y1, int[] c

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 颜色渲染(三) Shader颜色渲染

版权声明:本文为博主原创文章,未经博主允许不得转载. 相信看过在上一篇中提到的三篇文章后,大家已经对颜色处理方面有更深的体会. 之前讲到颜色渐变的效果, 具体怎么做呢,这就需要应用颜色渲染. 首先要介绍Android Api中关于颜色渲染的几个重要的类:    Shader,BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient 看一下它们之间的关系:  public class Shader extends 

Android 颜色渲染(八) SweepGradient扫描/梯度渲染

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(八) SweepGradient 扫描/梯度渲染 为什么什么叫扫描渲染呢?  相信大家都看过雷达扫描的效果,尤其是在安全软件中.   public SweepGradient(float cx, float cy, int[] colors, float[] positions) Parameters: cx 渲染中心点x 坐标 cy 渲染中心y 点坐标 colors 围绕中心渲染的颜色数组,至少要

Android 颜色渲染(九) PorterDuff及Xfermode详解

版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色渲染(九)  PorterDuff及Xfermode详解 之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前,  由于构造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会有很大的帮 助: 在讲具体的使用之前补充一点知识,这就是 Proter

Android 颜色渲染(一) 颜色选择器 ColorPickerDialog剖析

版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色选择器之ColorPickerDialog剖析 有这样一个需求,可以让用户自定义背景颜色,这就需要提供一个颜色选择器给用户. 在Android 中,如何实现这样的功能呢,遇到这种需求是,先查看一下ApiDemos,是否已经有相关的实例,果然,找到了一个可以参考的demo:ColorPickerDialog 我已经把apidemos导入到eclipse中,请看截图: 我们要找的就是这个ColorPickerDialog,在c

Android中自定义视图View之---渲染器Shader对象

下面再来看下一个知识点:颜色渲染Shader对象 为什么我要把Shader对象单独拿出来说一下呢?因为这个对象在对于我们处理图形特效的时候是非常有用的 下面来看一下Android中Shader对象 在Android Api中关于颜色渲染的几个重要的类:Shader,BitmapShader,ComposeShader,LinearGradient,RadialGradient,SweepGradient它们之间的关系是: Shader是后面几个类的父类 该类作为基类主要是返回绘制时颜色的横向跨度

Android应用程序UI硬件加速渲染的Display List渲染过程分析

在硬件加速渲染环境中,Android应用程序窗口的UI渲染是分两步进行的.第一步是构建Display List,发生在应用程序进程的Main Thread中:第二步是渲染Display List,发生在应用程序进程的Render Thread中.Display List的渲染不是简单地执行绘制命令,而是包含了一系列优化操作,例如绘制命令的合并执行.本文就详细分析Display List的渲染过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面An