2011.07.18——— android AlphaBitmap

参考:http://yueguc.iteye.com/blog/781659
http://blog.csdn.net/wylwhd/article/details/6180274


package com.example.android.apis.graphics;import com.example.android.apis.R;import android.app.Activity;import android.content.Context;import android.graphics.*;import android.os.Bundle;import android.view.KeyEvent;import android.view.*;import java.io.InputStream;import java.io.ByteArrayOutputStream;public class AlphaBitmap extends GraphicsActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(new SampleView(this));    }        private static class SampleView extends View {        private Bitmap mBitmap;        private Bitmap mBitmap2;        private Bitmap mBitmap3;        private Shader mShader;                private static void drawIntoBitmap(Bitmap bm) {            float x = bm.getWidth();            float y = bm.getHeight();            //以bitmap为画布,内容都绘制在bitmap上面            Canvas c = new Canvas(bm);            Paint p = new Paint();            p.setAntiAlias(true);//抗锯齿 为true                        p.setAlpha(0x80);//设置透明度            //p.setStyle(Paint.Style.STROKE);//设置填充模式            c.drawCircle(x/2, y/2, x/2, p);//画圆                        p.setAlpha(0x30);            // 也就是文字在图片上面            p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));            p.setTextSize(60);            p.setTextAlign(Paint.Align.CENTER);            /*FontMetrics是字体度量的类描述了给定文本大小的各种各样的字体度量。              * ascent 表示到基准线之上的距离              * bottom 表示到基准线之下的最大距离,它是最低的字体类型              * descent 表示到基准线之下的距离              * leading 空格字符到基准线的距离,为0              * */            Paint.FontMetrics fm = p.getFontMetrics();            c.drawText("Alpha", x/2, (y-fm.ascent)/2, p);        }                public SampleView(Context context) {            super(context);            setFocusable(true);            //得到图片的输入流            InputStream is = context.getResources().openRawResource(R.drawable.app_sample_code);            mBitmap = BitmapFactory.decodeStream(is);            /*             * extractAlpha()位图的这个方法是通过提取              * 了原始位图的透明通道值重建新的位图             * 可以通过这个给Imageiew画源码             */             mBitmap2 = mBitmap.extractAlpha();            //透明度是8?            mBitmap3 = Bitmap.createBitmap(200, 200, Bitmap.Config.ALPHA_8);            drawIntoBitmap(mBitmap3);                        mShader = new LinearGradient(0, 0, 100, 70, new int[] {                                         Color.RED, Color.GREEN, Color.BLUE },                                         null, Shader.TileMode.MIRROR);        }                @Override protected void onDraw(Canvas canvas) {            canvas.drawColor(Color.WHITE);            Paint p = new Paint();            float y = 10;                        p.setColor(Color.RED);            canvas.drawBitmap(mBitmap, 10, y, p);            y += mBitmap.getHeight() + 10;            p.setStyle(Paint.Style.STROKE);            canvas.drawBitmap(mBitmap2, 10, y, p);            y += mBitmap2.getHeight() + 10;            p.setShader(mShader);            canvas.drawBitmap(mBitmap3, 10, y, p);        }    }}



涉及的知识点如下:

1. Bitmap.extractAlpha()位图的这个方法是通过提取 了原始位图的透明通道值重建新的位图2.Bitmap.Config是内部枚举类表示位图的颜色配置, 有ALPHA_8、ARGB_4444、ARGB_8888、RGB_5653.LinearGradient类是Shader的一个子类,它实现的是一个线性梯度变化的一个着色器,4.Shader.TileMode是超出梯度线的颜色变化模式CLAMP--- 固定shader绘画时颜色超过原始边界(梯度线)的部分颜色用边界颜色绘制。REPEAT---在水平和垂直方向重复使用着色器的色相,但边界分明MIRROR -----在水平和垂直方向重复使用着色器的色相,交换的映像色相使得邻近的色相总是一致;颜色关于梯度线镜像5.canvas.drawBitmap()6.Paint.Style画刷的样式枚举类 STROKE--- 只绘制笔画形状 Fill ---填充 FILL_AND_STROKE---既画笔画又填充7. p.setXfermode(new PorterDuffXfermode(Mode.SRC));用指定的PorterDuff模型创建xformode,PorterDuff.Mode.SRC表示下面要绘制的文本应在上面绘制的圆的上层8.Paint.Align 是文本对齐方式的一个枚举类 CENTER---表示文本居中 LEFT ---表示做对齐 RIGHT ---表示右对齐9.Paint.FontMetrics fm = p.getFontMetrics();FontMetrics是字体度量的类描述了给定文本大小的各种各样的字体度量。 ascent--- 表示到基准线之上的距离 bottom--表示到基准线之下的最大距离,它是最低的字体类型 descent ---表示到基准线之下的距离 leading--- 空格字符到基准线的距离,为010.p.setAntiAlias(true);在绘制一个新的Paint对象时,可以通过传递给它一些标记来影响它被渲染的方式。ANTI_ALIAS_FLAG是其中一种很有趣的标记,它可以保证在绘制斜线的时候使用抗锯齿效果来平滑该斜线的外观。在绘制文本的时候,抗锯齿效果尤为重要,因为经过抗锯齿效果处理之后的文本非常容易阅读。要创建更加平滑的文本效果,可以应用SUBPIXEL_TEXT_FLAG,它将会应用子像素抗锯齿效果。也可以手工地使用setSubpixelText和setAntiAlias方法来设置这些标

更多相关文章

  1. 2011.07.18——— android AlphaBitmap
  2. android TextView 走马灯效果
  3. android 自定义组件圆形边框
  4. android中的震动
  5. android中自定义attr,以及style杂谈
  6. Android(安卓)布局之RelativeLayout
  7. Android(安卓)DrawerLayout实现抽屉效果
  8. android中的震动
  9. android中的震动

随机推荐

  1. Android中TrafficStats流量监控类
  2. Android(安卓)View的scrollTo()、scrollB
  3. tensorflow和android零接触 (mac)
  4. Mac上面利用charles抓取https的包(androi
  5. Android(安卓)判断触摸点是否在某个view
  6. Android图片加载之认识bitmap的四种加载
  7. Android在线更新版本(服务端+客户端Code)
  8. Android(安卓)Material ProgressBar
  9. 使用ContentProvider共享数据
  10. 2016年Android新技术到底有哪些