`
evilwicker
  • 浏览: 63286 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类

Android 中的图形图像的渲染

阅读更多

现在才发现原来图像没办法贴上来各位下载源代码自己运行把。

Shader ,  ShapeDrawable两个类实现画图

Android中提供了Shader类专门用来渲染图像以及一些几何图形,Shader下面包括几个直接子类,分别是BitmapShader ComposeShaderLinearGradientRadialGradientSweepGradient BitmapShader主要用来渲染图像,LinearGradient 用来进行梯度渲染,RadialGradient 用来进行环形渲染,SweepGradient 用来进行梯度渲染,ComposeShader则是一个 混合渲染,可以和其它几个子类组合起来使用。
    Shader类的使用,都需要先构建Shader对象,然后通过PaintsetShader方法设置渲染对象,然后设置渲染对象,然后再绘制时使用这个Paint对象即可。当然,用不同的渲染时需要构建不同的对象。  下面是一个简单的示例,其实用起来比较简单了 只是方法参数比较多。但是还比较容易理解。大家可以去翻翻API 这里就不深入讨论了,以后用到再说吧

 

ShapeDrawable继承自Drawable是可以绘制图像的类。在绘制图像时可以给其设置图形(如下面的运行时图的显示效果)。

 

1.       获得图像资源

mBitmap = ((BitmapDrawable)getResources()

//                                            .getDrawable(R.drawable.wall))

                                                                .getDrawable(R.drawable.gui_lun_mei))

                                                                                                .getBitmap();

2.       Shape对象,ShapeDrawable对象,对ShapeDrawable对象进行设置

/*构建ShapeDrawable对象并且定义形状为椭圆*/

                                mShapDrawable = new ShapeDrawable(new OvalShape());

/*创建BitmapShader对象-----效果渲染*/

            mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.REPEAT, Shader.TileMode.MIRROR);

                                /*设置Shader对象*/

mShapDrawable.getPaint().setShader(mBitmapShader);

                                /*设置显示区域*/

                                mShapDrawable.setBounds(50,50,50 + mBitmapWidth,50 + mBitmapHeight);

3.       绘制图像

/*绘制*/

                mShapDrawable.draw(canvas);

 

效果

                               

 

LinearGradient---------》线性渐变渲染

//线性渐变熏染

mLinearGradient = new LinearGradient(0, 0, 200, 300,

                        new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.WHITE} , null,

                        Shader.TileMode.REPEAT);

           

//初始化画笔

mPaint = new Paint();

 

//绘制一个渐变的矩形

mPaint.setShader(mLinearGradient);

canvas.drawRect(mBitmapWidth,0,320,mBitmapHeight, mPaint);

 

 

 

 

 

 

 

ComposeShader混合渲染

//混合渲染

mComposeGradient = new ComposeShader(mBitmapShader, mLinearGradient,      PorterDuff.Mode.DARKEN);

//绘制混合渲染

mPaint.setShader(mComposeGradient);

canvas.drawRect(0, mBitmapHeight, mBitmapWidth, mBitmapHeight + 400, mPaint);

 

 

 

 

RadiaGradient环形渐变效果

 

//RadialGradient 环形渐变效果

mRadialGradient = new RadialGradient(200, 200, 50,

                        new int[]{Color.GREEN,Color.RED,Color.BLUE,Color.WHITE},

                        null, Shader.TileMode.REPEAT);

mPaint.setShader(mRadialGradient);

canvas.drawCircle(200, 200, 80, mPaint);

 

 

SweepGradient梯形渐变

      //SweepGradient梯形渐变

      mSweepGradient = new SweepGradient(250, 250, new int[]{

            Color.GREEN,Color.RED,Color.BLUE,Color.WHITE

      }, null);

           

      mPaint.setShader(mSweepGradient);

      canvas.drawRect(200, 200, 300, 300, mPaint);

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics