import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Shader;import android.graphics.Bitmap.Config;import android.graphics.Paint.Align;import android.graphics.PorterDuff.Mode;import android.graphics.drawable.Drawable;public class DrawUtil{/** * 画出一个这样一个图形:中间带标题文字的半圆,半圆可以设置阴影和顶部的矩形投影 *  * @param text *            标题文字 (此处设置为两个字的居中效果) * @param radio *            半圆的半径 * @param shadowWidth *            阴影的宽度 * @param isWithRectf *            是否有矩形投影 * @param rectfColor *       矩形投影的颜色 * @param paint *            画笔对象 * @return */public static Bitmap drawHalfCircleWithText(String text, int radio,int shadowWidth, boolean isWithRectf, int rectfColor, Paint paint){Bitmap bitmap = Bitmap.createBitmap(radio * 2, radio * 2 + shadowWidth, Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);// 画一个带圆心的扇形,此处为半圆canvas.drawArc(new RectF(0, 0, radio * 2, radio * 2), 360, 180, true,paint);// 是否需要在半圆顶部画出一个矩形投影if (isWithRectf){paint = reset(paint);paint.setColor(rectfColor);Bitmap bmp = drawRectf(radio * 2, radio/8, paint);paint = reset(paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));//去掉矩形投影和半圆不相交的部分canvas.drawBitmap(bmp, 0, radio, paint);}else{LinearGradient lg=new LinearGradient(0,0,0,radio/8,0x44000000,0x00000000,Shader.TileMode.MIRROR);paint = reset(paint);paint.setShader(lg);Bitmap bmp = drawRectf(radio * 2, radio/8, paint);paint = reset(paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));//去掉矩形投影和半圆不相交的部分canvas.drawBitmap(bmp, 0, radio, paint);}//在半圆上面画上文字paint = reset(paint);paint.setColor(Color.WHITE);paint.setTextSize(radio * 5 / 12);paint.setTextAlign(Align.CENTER);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));canvas.drawText(text, radio, radio * 5 / 3, paint);bitmap = Bitmap.createBitmap(bitmap, 0, radio, radio * 2, radio+ shadowWidth);return bitmap;}/** * 根据宽度画出一条指定三角形数量的锯齿 *  * @param screenWidth *            宽度 * @param triangleHeight *            锯齿的高度 * @param triangleNum *            三角形的数量 * @param isDown *   三角形顶点的朝向,true表示向下,false表示向上            * @param paint *            画笔对象 * @return 返回bitmap对象 */public static Bitmap drawtriangle(float screenWidth, float triangleHeight,int triangleNum, boolean isDown,Paint paint){float triangleWidth = screenWidth / triangleNum;Bitmap bitmap = Bitmap.createBitmap((int) screenWidth,(int) triangleHeight, Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);Path path = new Path();if(isDown){path.moveTo(0, 0);for (int i = 0; i < triangleNum * 2; i++){if (i % 2 == 0){path.lineTo((triangleWidth / 2) * (i + 1), triangleHeight);} else if (i % 2 == 1){path.lineTo((triangleWidth / 2) * (i + 1), 0);}}}else{path.moveTo(0, triangleHeight);for(int i = 0; i < triangleNum * 2; i++){if(i % 2 == 0){path.lineTo((triangleWidth / 2) * (i + 1), 0);} else if(i % 2 == 1){path.lineTo((triangleWidth / 2) * (i + 1), triangleHeight);}}}path.close();canvas.drawPath(path, paint);return bitmap;}/** * 画出一条带有指定半圆数量的花边 * @param width 花边的长度 * @param num 半圆的数量 * @param paint 画笔对象 * @return */public static Bitmap drawMultHalfCircle(int width, int num,Paint paint){int radio = (width/num)/2;Bitmap bitmap = Bitmap.createBitmap(width, radio, Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);for(int i = 0; i < num; i++){canvas.drawBitmap(drawHalfCircle(radio, paint), radio*2*i, 0, paint);}return bitmap;}/** * 画一个矩形 * @param width * @param height * @param color * @param paint * @return */public static Bitmap drawRectf(float width, float height, Paint paint){Bitmap bitmap = Bitmap.createBitmap((int)width, (int)height, Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawRect(0, 0, width, height, paint);return bitmap;}/** * 画出一个半圆 *  * @param radio *            半径 * @param paint * @return */public static Bitmap drawHalfCircle(int radio, Paint paint){Bitmap bitmap = Bitmap.createBitmap((int) (radio * 2),(int) (radio * 2), Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);canvas.drawArc(new RectF(0, 0, radio * 2, radio * 2), 360, 180, true,paint);bitmap = Bitmap.createBitmap(bitmap, 0, radio, radio * 2, radio);return bitmap;}/** * 根据图片的短边裁剪成圆形并在周围画上一定宽度的白边 * @param bitmap * @param ringWidth * @param radio * @param paint * @return */public static Bitmap drawBitmapWithRing(Bitmap bitmap,int ringWidth,Paint paint){Bitmap roundBitmap = toRoundBitmap(bitmap);int radio = roundBitmap.getWidth() / 2;Bitmap _bitmap = Bitmap.createBitmap((radio+ringWidth) * 2,(radio+ringWidth) * 2, Config.ARGB_8888);Canvas canvas = new Canvas(_bitmap);canvas.drawCircle((radio+ringWidth), (radio+ringWidth), (radio+ringWidth), paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER));canvas.drawBitmap(roundBitmap, ringWidth, ringWidth, paint);return _bitmap;}   /**     * 将图像裁剪成圆形     *      * @param bitmap     * @return     */    public static Bitmap toRoundBitmap(Bitmap bitmap)    {    if(bitmap == null)    {    return null;    }            int width = bitmap.getWidth();        int height = bitmap.getHeight();        float roundPx;        float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;        if (width <= height)        {            roundPx = width / 2;            top = 0;            bottom = width;            left = 0;            right = width;            height = width;            dst_left = 0;            dst_top = 0;            dst_right = width;            dst_bottom = width;        } else        {            roundPx = height / 2;            float clip = (width - height) / 2;            left = clip;            right = width - clip;            top = 0;            bottom = height;            width = height;            dst_left = 0;            dst_top = 0;            dst_right = height;            dst_bottom = height;        }        Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);        Canvas canvas = new Canvas(output);        final int color = 0xff424242;        final Paint paint = new Paint();        final Rect src = new Rect((int) left, (int) top, (int) right,                (int) bottom);        final Rect dst = new Rect((int) dst_left, (int) dst_top,                (int) dst_right, (int) dst_bottom);        final RectF rectF = new RectF(dst);        paint.setAntiAlias(true);        canvas.drawARGB(0, 0, 0, 0);        paint.setColor(color);        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));        canvas.drawBitmap(bitmap, src, dst, paint);        return output;    }        public static Bitmap darwShadow(Bitmap bitmap,int color,int padding)    {        int width = bitmap.getWidth() + padding;        int height = bitmap.getHeight() + padding;        Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);        Canvas canvas = new Canvas(output);        Paint paint = new Paint();        paint = reset(paint);        paint.setColor(color);        canvas.drawBitmap(bitmap, padding/2, padding/2, null);        canvas.drawRoundRect(new RectF(0, 0, width, height),padding/2,padding/2,paint);        return output;    }    private static Paint reset(Paint paint){paint.reset();paint.setAntiAlias(true);paint.setStyle(Paint.Style.FILL);return paint;}}

更多相关文章

  1. 【Android】日常记录:自定义Button样式
  2. Android(安卓)layer-list实现左右半圆中间虚线
  3. android Canvas类介绍
  4. Android(安卓)drawRect参数
  5. Android(安卓)简单图形绘制
  6. 绘制圆形、圆角矩形背景
  7. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  8. Android高手进阶教程(三)之----Android(安卓)中自定义View的应用
  9. Android(安卓)利用canvas画各种图形(点、直线、弧、圆、椭圆、文

随机推荐

  1. Android构建工具
  2. Android API Level对应Android版本一览表
  3. android 欢迎画面
  4. Linux下Android开发平台的搭建
  5. 2011.07.08(5)——— android shortcut
  6. android 通过数组,流播放声音的方法
  7. Android 控件的可见,不可见,隐藏的设置【
  8. 搜索栏+流式布局+数据库
  9. android 获取手机的信息
  10. android之接收和发送广播的开机可自动运