Android 中的图形图像的渲染

本文介绍了Android中Shader类及其子类的应用,包括BitmapShader、LinearGradient、RadialGradient和SweepGradient等,用于实现图像渲染效果。同时展示了如何使用ShapeDrawable绘制带有不同Shader渲染效果的图形。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值