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. ubuntu下安装vmtool

    这是我遇到这个问题的解决办法-------无法通过vmware的设置安装vmtoll 1.关闭虚拟机2.编辑虚拟机,将CD/DVD选项改成自动检测(而不是之前指向的ubuntuxxx.iso)3.重启 ...

  2. 瞎比比系列---1st

    A - 项目管理HDU4858 /* 题意: 这个项目有n个节点, 两个节点间可能有多条边,不过一条边的两端必然是不同的节点. 0的时候:接下来两个数u v表示给项目u的能量值加上v: 1的时候: 这 ...

  3. python 类型转换总结

    一.数字和字符串 >>> ord('a') # ascii码 97 >>> chr(97) 'a' >>> >>> hex(16 ...

  4. Log2Net组件代码详解(附开源代码)

    上一篇,我们介绍了Log2Net的需求和整体框架,我们接下来介绍我们是如何用代码实现Log2Net组件的功能的. 一.整体介绍 Log2Net组件本身是一个Dll,供其他系统调用. 本部分由以下几部分 ...

  5. NowCoder小定律

    题目:https://www.nowcoder.com/pat/2/problem/259 #include <cstdio> #include <cstring> #incl ...

  6. CoreData修改了数据模型报错 The model used to open the store is incompatible with the one used to create the store

    在iOS 6 – Core Data 应用程序的开发过程中, App启动时出现如下异常信息: reason = “The model used to open the store is incompa ...

  7. JAVA常用知识总结(四)——集合

    先附一张java集合框架图 下面根据面试中常问的关于集合的问题进行了梳理: Arraylist 与 LinkedList 有什么不同? 1. 是否保证线程安全: ArrayList 和 LinkedL ...

  8. C/C++程序计时函数gettimeofday的使用

    linux 环境下 用 clock_t发现不准. 换用 //头文件 #include <sys/time.h> //使用timeval start, end;   gettimeofday ...

  9. Python实现决策树ID3算法

    主要思想: 0.训练集格式:特征1,特征2,...特征n,类别 1.采用Python自带的数据结构字典递归的表示数据 2.ID3计算的信息增益是指类别的信息增益,因此每次都是计算类别的熵 3.ID3每 ...

  10. Jquery 操作HTML5自定义属性data-*

    HTML5自定义属性规范的写法<a data-roleid="12"></a>,也可以直接写<a roleid="12">& ...