android开发步步为营之58:给图片绘制圆形气泡背景效果
来源:互联网 发布:360优化游戏 编辑:程序博客网 时间:2024/04/30 17:33
最近在开发项目的时候,有一个需求,需要给应用图标绘制圆形气泡背景,有了彩色气泡这样显得漂亮一点,气泡的颜色是应用图标的颜色均值,先看看效果,然后,我再给出demo。
demo应用图标是这样的:
添加气泡背景后是这样的:
仔细看圆形背景颜色是图标颜色的均值。
好的,下面我们来完成这个demo。
第一步、编写页面activity_drawcycle.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ImageView android:id="@+id/imgCycle" android:layout_width="40dp" android:layout_height="40dp" android:src="@drawable/ic_launcher" /></LinearLayout>
第二步、编写Activity,DrawCycleActivity.java
/** * */package com.figo.study;import com.figo.study.utils.UIUtils;import android.app.Activity;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.PixelFormat;import android.graphics.PorterDuffXfermode;import android.graphics.Bitmap.Config;import android.graphics.RectF;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.widget.ImageView;/** * @author figo * */public class DrawCycleActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_drawcycle); //需要给该图片绘制圆形气泡背景Drawable img = getResources().getDrawable(R.drawable.ic_launcher);//绘制圆形气泡Bitmap bp = createCircleImage(drawableToBitmap(img),40); //绘制好的图片赋值给ImageView控件ImageView imgView = (ImageView) findViewById(R.id.imgCycle);imgView.setImageDrawable(new BitmapDrawable(bp));}private Bitmap drawableToBitmap(Drawable drawable){Bitmap bitmap=null;try {bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight(),drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888: Bitmap.Config.RGB_565);Canvas canvas = new Canvas(bitmap);drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());drawable.draw(canvas);} catch (Exception e) {// TODO: handle exception}return bitmap;}private Bitmap createCircleImage(Bitmap source, int sizeDp) {final Paint paint = new Paint();final int nw = source.getWidth(); final int nh = source.getHeight(); //计算源图片颜色平均值,然后将该平均值颜色作为气泡颜色 int[] pixels = new int[nw * nh]; source.getPixels(pixels, 0, nw, 0, 0, nw, nh); long rtotal=0; long gtotal=0; long btotal=0; for (int i = 0; i < pixels.length; i++) { int p = pixels[i]; int r = (p & 0x00FF0000) >> 16; int g = (p & 0x0000FF00) >> 8; int b = (p & 0x000000FF) >> 0; rtotal+=r; gtotal+=g; btotal+=b; } int rAverage=(int) (rtotal / (nw * nh)); int gAverage=(int) (gtotal / (nw * nh)); int bAverage=(int) (btotal / (nw * nh)); //设置画笔颜色paint.setColor(Color.argb(255, rAverage, gAverage, bAverage));paint.setAntiAlias(true);int sizePix=UIUtils.dip2px(DrawCycleActivity.this,sizeDp);Bitmap target = Bitmap.createBitmap(sizePix, sizePix, Config.ARGB_8888);//绘制正方形画布Canvas canvas = new Canvas(target); //在正方形里面绘制圆形canvas.drawCircle(sizePix/2, sizePix/2, sizePix / 2, paint);//图片相交模式,canvas原有的图片 可以理解为背景 就是dst,新画上去的图片 可以理解为前景 就是src//SRC_OVER就是新画上去的图片在canvas之上paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_OVER)); //计算目标图形的左上角和右下角的坐标RectF dst=new RectF(); //圆形内置正方形(即将绘制的图片区域)的边长float destRectWidth= (float)Math.sqrt((sizeDp*sizeDp/2));float left= (sizeDp-destRectWidth)/2+1;//空1dpfloat top=left;float right=sizeDp-left;float bottom=right;//dst.set(UIUtils.dip2px(DrawCycleActivity.this, 5.86f), UIUtils.dip2px(DrawCycleActivity.this,5.86f), UIUtils.dip2px(DrawCycleActivity.this,34.14f), UIUtils.dip2px(DrawCycleActivity.this,34.14f));dst.set(UIUtils.dip2px(DrawCycleActivity.this,left), UIUtils.dip2px(DrawCycleActivity.this,top), UIUtils.dip2px(DrawCycleActivity.this,right),UIUtils.dip2px(DrawCycleActivity.this,bottom));canvas.drawBitmap(source, null, dst, paint);return target;}}
0 0
- android开发步步为营之58:给图片绘制圆形气泡背景效果
- Android绘制圆形图片及点击效果
- android开发步步为营之90:android图片处理技术之三(Gradient渐变图片的绘制)
- android 绘制圆形图片
- Android 绘制圆形图片
- Android 绘制圆形图片
- android开发之绘制圆形头像
- android开发之给LinearLayou设置网络图片作为背景
- android开发步步为营之8:ActivityGroup实现Tab效果
- android圆形图片效果
- android开发步步为营之66:android图片选取
- android开发,绘制圆形图片并添加文字居中显示
- android之View和LinearLayout的重写(实现背景气泡和波纹效果)
- android开发步步为营之104:文字加阴影效果和描边效果的实现
- android 圆角 圆形 图片 背景 selector 技巧
- android绘制圆形、圆角、圆环图片
- Android绘制圆形图片的方法总结
- android绘制圆形圆角图片
- 《剑指Offer》学习笔记--面试题23:从上往下打印二叉树
- iOS多线程GCD
- 使用GCD
- 消息摘要
- OpenCVR 可以互联啦
- android开发步步为营之58:给图片绘制圆形气泡背景效果
- 单循环链表中各种函数的实现
- CSU 1616: Heaps(区间DP)优化版
- 光棍节,黑行天下技术交流博正式启…
- day12/InputOutputDemo.java
- 免杀!第三课 免杀前奏+特征码定位…
- 免杀! 第二课 测试环境!
- 免杀! 第四节 壳!
- 菜鸟教程:BlackTea简谈IP及其应用…