1,setCompoundDrawables(Drawable left, Drawable top,Drawable right, Drawable bottom)

  设置图片出现在textView,button,editText的各个方向.其中,left是drawable类型的.

2.如何获取上面的drawable

  Drawable drawable = getResources().getDrawable(R.drawable.username);

  drawable.setBounds(5,1,60,50);

  设置drawable的坐标为5,1,宽和高为:60和50

3.

手动设置文本与图片相对位置时,常用到如下方法:

setCompoundDrawables(left, top, right, bottom)

setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom)

意思是设置Drawable显示在text的左、上、右、下位置。

但是两者有些区别:
setCompoundDrawables 画的drawable的宽高是按drawable.setBound()设置的宽高,
所以才有The Drawables must already have had setBounds(Rect) called.

使用之前必须使用Drawable.setBounds设置Drawable的长宽。

setCompoundDrawablesWithIntrinsicBounds是画的drawable的宽高是按drawable固定的宽高,
所以才有The Drawables' bounds will be set to their intrinsic bounds.

即通过getIntrinsicWidth()与getIntrinsicHeight()获得,

4.

1、Drawable就是一个可画的对象,其可能是一张位图(BitmapDrawable),也可能是一个图形(ShapeDrawable),还有可能是一个图层(LayerDrawable),我们根据画图的需求,创建相应的可画对象
2、Canvas画布,绘图的目的区域,用于绘图
3、Bitmap位图,用于图的处理
4、Matrix矩阵
1、从资源中获取Bitmap
 
    1. Resources res = getResources();  
    2. Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.icon);  

 

2、Bitmap → byte[]
 
public byte[] Bitmap2Bytes(Bitmap bm) {  

 ByteArrayOutputStream baos = new ByteArrayOutputStream();  

 bm.compress(Bitmap.CompressFormat.PNG, 100, baos);

return baos.toByteArray();  

}  

 
 
     public Bitmap Bytes2Bimap(byte[] b) {  
      if (b.length != 0) {  
        return BitmapFactory.decodeByteArray(b, 0, b.length);  
     } else {  
          return null;  
     }  
     }  
 
     public static Bitmap zoomBitmap(Bitmap bitmap, int width, int height) {  
       int w = bitmap.getWidth();  
        int h = bitmap.getHeight();  
        Matrix matrix = new Matrix();  
       float scaleWidth = ((float) width / w);  
        float scaleHeight = ((float) height / h);  
         matrix.postScale(scaleWidth, scaleHeight);  
        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix, true);  
        return newbmp;  
     }  
  drawable转化成bitmap
 
     public static Bitmap drawableToBitmap(Drawable drawable) {  
          // 取 drawable 的长宽  
          int w = drawable.getIntrinsicWidth();  
           int h = drawable.getIntrinsicHeight();  
    
           // 取 drawable 的颜色格式  
           Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888  
                    : Bitmap.Config.RGB_565;  
        // 建立对应 bitmap  
           Bitmap bitmap = Bitmap.createBitmap(w, h, config);  
          // 建立对应 bitmap 的画布  
             Canvas canvas = new Canvas(bitmap);  
           drawable.setBounds(0, 0, w, h);  
           // 把 drawable 内容画到画布中  
           drawable.draw(canvas);  
           return bitmap;  
       }  
获得圆角图片 
 
     public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) {  
         int w = bitmap.getWidth();  
         int h = bitmap.getHeight();  
         Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888);  
        Canvas canvas = new Canvas(output);  
        final int color = 0xff424242;  
        final Paint paint = new Paint();  
         final Rect rect = new Rect(0, 0, w, h);  
        final RectF rectF = new RectF(rect);  
         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, rect, rect, paint);  
       
         return output;  
    }  
 
 
 
1、Bitmap转换成Drawable
    .Bitmap bm=xxx; //xxx根据你的情况获取  
     BitmapDrawable bd= new BitmapDrawable(getResource(), bm);   
     因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。
  
2、Drawable缩放
     public static Drawable zoomDrawable(Drawable drawable, int w, int h) {  
       int width = drawable.getIntrinsicWidth();  
        int height = drawable.getIntrinsicHeight();  
       // drawable转换成bitmap  
         Bitmap oldbmp = drawableToBitmap(drawable);  
         // 创建操作图片用的Matrix对象  
        Matrix matrix = new Matrix();  
        // 计算缩放比例  
         float sx = ((float) w / width);  
         float sy = ((float) h / height);  
         // 设置缩放比例  
         matrix.postScale(sx, sy);  
      // 建立新的bitmap,其内容是对原bitmap的缩放后的图  
         Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height,  
                 matrix, true);  
        return new BitmapDrawable(newbmp);  
     }

android 图片的更多相关文章

  1. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  2. Android图片处理

    相信做Android开发的小伙伴对于Android图片压缩.裁剪一定有很深的印象,今天我将带领大家一起学习一下这个看着高深莫测的知识,以便再以后的学习.工作中可以帮助到大家. 首先我们看一下这个问题出 ...

  3. Android图片缓存之Glide进阶

    前言: 前面学习了Glide的简单使用(Android图片缓存之初识Glide),今天来学习一下Glide稍微复杂一点的使用. 图片缓存相关博客地址: Android图片缓存之Bitmap详解 And ...

  4. Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  5. Android图片缓存之Bitmap详解

    前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...

  6. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

  7. 一步一步打造自己的Android图片浏览器(原创)

    今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...

  8. Android 图片浏览器 从原来位置放大至全屏显示

    android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...

  9. android图片处理方法

    Java代码 //压缩图片大小 public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ...

  10. Android 图片文件操作、屏幕相关、.9图片的理解

     一:Android图片操作 1.存储bitmap到本地文件系统 public static void bitmapToFile(Bitmap bitmap, String uri) { if(!ex ...

随机推荐

  1. POJ3186【区间DP】

    题意: 每次只能取两端,然后第 i 次取要val[ i ]*i,求一个最大值 一切都是错觉[读者省略此段] 这道题目一开始想的就是记忆化搜索,然后太天真了?好像是,一开始用一维dp[ i ]直接代表一 ...

  2. Linux系统配置文件

    ubuntu系统: ~/.bashrc:该文件保存终端的文本,颜色等各类设置 ~/.bash_history:保存用户运行过的命令 ~:表示home目录 /etc/matb:该文件保存所有挂载分区的文 ...

  3. Cloudera Manager架构原理

    cloudera manager的核心是管理服务器,该服务器承载管理控制台的Web服务器和应用程序逻辑,并负责安装软件,配置,启动和停止服务,以及管理上的服务运行群集. Cloudera Manage ...

  4. Window下完全卸载删除Nodejs

    如何从Windows中删除Node.js: 1.从卸载程序卸载程序和功能. 2.重新启动(或者您可能会从任务管理器中杀死所有与节点相关的进程). 3.寻找这些文件夹并删除它们(及其内容)(如果还有). ...

  5. Hexo瞎折腾系列(7) - Coding Pages申请SSL/TLS证书错误

    问题 今天我的个人站点SSL/TLS证书到期,我的证书是由Coding Pages提供的,每次申请成功后有效期是三个月,证书到期后可以继续免费申请.但是当我登陆进入Coding Pages服务的后台并 ...

  6. Centos 6.x 搭建 Zabbix Server

      zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让 ...

  7. CSS3向外扩散的圆

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  8. bzoj 4821 [Sdoi2017]相关分析

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4821 题解 做法显然 就是维护一颗线段树 里面装4个东西 区间x的和 区间y的和 区间$x^ ...

  9. 【poj2528】Mayor's posters

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 64939   Accepted: 18770 ...

  10. Mysql中的索引问题

    索引的用途 提高查询的效率,相当于在字典中建立的字母表或者偏旁部首表,这样查询当然比一行一行查询要快的多 每个存储引擎可以建立索引的长度是不一样的,但每个表至少支持16个索引,总的索引长度至少为256 ...