关于 android的 渲染器 Shader
来源:互联网 发布:淘宝哪家二手3ds 编辑:程序博客网 时间:2024/05/17 04:37
因为公司在 自定义的画图上面比较苛刻(各种要求= =),最后又是改来改去的。反正是 Shader起到很大作用,特此记录一下下、在achartengine的基础上没有能满足他们= =
androd 提供了Shader类专门用来渲染图像以及一些几何图形。
自己写个class 继承 Vew
1.bitmap渲染器效果
2.线性渲染器效果
3.环形渲染器效果
4.混合渲染器效果
5.梯度渲染器效果
好了,下来直接放代码吧。注释都很清晰的说, 想要调整各种效果自己调整 X,Y 和type就好
public class MyShaderView extends View {// Shader渲染器 下面的都继承于 Shader 供了Shader类专门用来渲染图像以及一些几何图形。BitmapShader bitmapShader; //bitmap渲染器ComposeShader composeShader; //混合渲染器LinearGradient linearGradient; //线性渲染RadialGradient radialGradient; //圆形那种环形渲染SweepGradient sweepGradient; //梯度渲染器int width;int height;public MyShaderView(Context context) {super(context); //用 bitmap先渲染1个图片吧= = //先得到图片 drawable - bitmapDrawable BitmapDrawable bitmap_deawable = (BitmapDrawable) getResources().getDrawable(R.drawable.yingkou); //再得到 bitmap Bitmap bitmap = bitmap_deawable.getBitmap(); width = bitmap.getWidth(); height = bitmap.getHeight(); //*******************************开始渲染bitmap图片 // new BitmapShader(bitmap, tileX, tileY) // tileX The tiling mode for x to draw the bitmap in. 在位图上X方向花砖模式 // tileY The tiling mode for y to draw the bitmap in. 在位图上Y方向花砖模式// CLAMP :如果渲染器超出原始边界范围,会复制范围内边缘染色。 // REPEAT :横向和纵向的重复渲染器图片,平铺。// MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT 重复方式不一样,他是以镜像方式平铺。 bitmapShader = new BitmapShader(bitmap, TileMode.MIRROR, TileMode.MIRROR); //******************************* LinearGradient 线性渲染 // LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode); // X0: 渐变起初点坐标x位置 // y0: 渐变起初点坐标y位置 // x1: 渐变终点坐标x位置 // y1: 渐变终点坐标y位置 // colors: 渐变颜色数组 // positions:这个也是一个数组用来指定颜色数组的相对位置 如果为null 就沿坡度线均匀分布 // tile:渲染模式(平铺方式) linearGradient = new LinearGradient(50, 50,1000,1000, new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.WHITE}, null,Shader.TileMode.REPEAT); //******************************* radialGradient 环形渲染 // x y 半径 渐变颜色数组 position 平铺方式 //多色 radialGradient = new RadialGradient( 50,200,50,new int[]{Color.WHITE,Color.YELLOW,Color.GREEN,Color.RED,Color.BLUE,}, null,Shader.TileMode.REPEAT); //单色 + 边框- 这个真心是应了 需求。。必须实心-为的是不露出后面的东西(paint本身画出来的设置空心会漏) //radialGradient = new RadialGradient( 50,200, 50, new int[] //{Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE, //Color.WHITE,Color.RED}, //null,Shader.TileMode.REPEAT); //******************************* composeShader 混合渲染 composeShader = new ComposeShader(bitmapShader,linearGradient,PorterDuff.Mode.DARKEN); //最后的 混合渲染模式有 PorterDuff.Mode有16种参数可供选择,下面有效果图 //分别为:CLEAR、SRC、DST、SRC_OVER、DST_OVER、SRC_IN、DST_IN、SRC_OUT、DST_OUT、 // SRC_ATOP、DST_ATOP、 XOR、DARKEN、LIGHTEN、MULTIPLY、SCREEN。 //******************************* sweepGradient 梯度渲染器 sweepGradient = new SweepGradient(30,30,new int[]{Color.GREEN,Color.RED,Color.BLUE,Color.WHITE},null); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //构建ShapeDrawable对象并定义形状为椭圆 // RectShape // ArcShape // RectShape //1.可以这样写 //ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape()); //得到画笔并设置渲染器 // shapeDrawable.getPaint().setShader(bitmapShader); //设置显示区域 // shapeDrawable.setBounds(20, 20, width-10, height-10); //绘制shapeDrawable // shapeDrawable.draw(canvas); // 2.也可以这样写 Paint paint = new Paint(); canvas.drawColor(Color.WHITE); //背景置为灰色 //绘制Bitmap渲染的椭圆 paint.setShader(bitmapShader); canvas.drawOval(new RectF(90, 20, 90+ width, 20+ height), paint); //绘制线性渐变的矩形 paint.setShader(linearGradient); canvas.drawRect(10, 200, 200, 400, paint); //绘制环形渐变的圆 paint.setShader(radialGradient); canvas.drawCircle(50,200,50, paint); //绘制混合渐变(线性与环形混合)的矩形 paint.setShader(composeShader); canvas.drawRect(0, 0, 1000, 1000, paint); //绘制梯形渐变的矩形 paint.setShader(sweepGradient); canvas.drawRect(50, 50, 300, 300, paint); }}
下面这张图是上面提到的混合 渲染器,16个每种type的样式
- 关于 android的 渲染器 Shader
- android的shader渲染器
- Android 图片渲染之Shader渲染器
- Android Shader渲染器:BitmapShader图片渲染
- Android——Shader渲染器
- Android渲染器Shader:LinearGradient(一)
- Android 颜色渲染Shader
- Android - Shader图像渲染
- Android 颜色渲染(三) Shader颜色渲染
- Android 颜色渲染(三) Shader颜色渲染
- Android 颜色渲染(三) Shader颜色渲染
- Android学习之Shader渲染
- Android学习之Shader渲染
- android 图像渲染(Shader)
- android使用shader进行渲染
- Android图像渲染之Shader
- Android自定义控件之Shader(着色器/渲染器)
- Android 图片特效处理:Shader着色器、渲染
- Code Jam 2008 Round1A Problem A. Minimum Scalar Product —— 贪心
- oracle中的profile文件管理用户
- 基础篇:操作系统、计算机网络、设计模式
- Java 学习笔记(不断更新)
- HDU 2087 kmp 计数裸题
- 关于 android的 渲染器 Shader
- StarUML使用说明-指导手册
- Code Jam 2009 Round2 Problem A. Crazy Rows —— 贪心
- android 修改ramdisk.img和init.rc && android启动后设置/data权限为770
- Java基础(十)——Sting类及包装类、其它对象、正则表达式
- Java基础(十一)——集合框架与泛型
- ServletConfig
- hrwj_edi
- C++中实现从std::string类型到bool型的转换