热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android动画系列之Bitmap

转载请注明出处:http:blog.csdn.nethlm2016Android动画之Bitmap在Android开发中,当你需要在见面中呈
转载请注明出处:http://blog.csdn.net/hlm2016
        Android动画之Bitmap
        在Android开发中,当你需要在见面中呈现图片时,经常需要用到ImageView来作为载体。虽然我们是要做一个动画,但还是可以用ImageView来承载。因为按照动画的播放,我们只要能让ImageView的占位图片不断发生变化或替换,就能实现形如GIF一样的动画效果了!那么要让ImageView实现图片加载,那我们就需要一个辅助类Bitmap来帮忙来,也就是我们这一节的重头戏啦(我们这里指的是程序运行时从手机图库或者文件中获取的图片,由用户自己来指定加载的图片,也就是说在接下来的文章中我会教大家如何获取系统图库并从中加载需要的图片,有空的同学可以先学习下Intent的用法,当然到时也会一起讲的,敬请期待!)
        说到Bitmap与ImageView,相信大家已经有所听闻,甚至个别朋友已经相当熟练,但是技术不嫌新,知识不怕多呀!所以在这一篇文章中,我不仅会顾及初学者对此的了解,同时会加入一些关于这两个类的进阶使用。
        为什么要在这里先讲Bitmap与ImageView呢?!其实很简单,在我开发的--动画SDK--AnimationForAndroid中经常要用到的就是这两个了,甚至是两者结合使用,实现更强大的动画效果!那么如何学习这两个重头戏呢,我今天还是打算先讲Bitmap,怕太多知识点大家一时接受不了!

1.Bitmap
    简介:这是一个Android自带的图片操作工具类。使用这个类,我们可以对一张图片进行一些操作了,比如,图片画质的配置、图片透明度的大小,等等。但是这个类并无法进行自身的实例化,只能依靠一个辅助类来创建一个Bitmap实例,那就是BitmapFactory类。因为此类在定义时构造函数都必须传入一个Bitmap实例,所以无法用此类直接实例Bitmap,下面自然会教大家如何实例此类的
    外部可调用的方法:(来自Bitmap.class文件)
public int getDensity() {}//获取图片像素密度
public void setDensity(int density) {}//设置图片像素密度
public void reconfigure(int width, int height, android.graphics.Bitmap.Config config) {}
//对图片进行重新设置
public void setWidth(int width) {}//设置宽度
public void setHeight(int height) {}//设置高度
public void setConfig(android.graphics.Bitmap.Config config) {}//设置已生成的配置config
public void recycle() {}//
public final boolean isRecycled() {}

public boolean compress(android.graphics.Bitmap.CompressFormat formatint, 
int quality, java.io.OutputStream stream) {}//将图片另存,见下文详解

public final int getWidth() {}
public final int getHeight() {}
//Scale是缩放的意思,也就是说看到Scale就可以判断这是用来指定图片缩放倍数的
public int getScaledWidth(android.graphics.Canvas canvas) {}
public int getScaledHeight(android.graphics.Canvas canvas) {}
public int getScaledWidth(android.util.DisplayMetrics metrics) {}
public int getScaledHeight(android.util.DisplayMetrics metrics) {}
public int getScaledWidth(int targetDensity) {}
public int getScaledHeight(int targetDensity) {}

public final int getByteCount() {}//获取图片的字节数

public final android.graphics.Bitmap.Config getConfig() {}//获取当前图片的配置内容

public boolean sameAs(android.graphics.Bitmap other) {}//将当前图片转换成传入的other参数

public void prepareToDraw() {
接下来的这一部分是Bitmap类中的枚举:

   /**
     * Bitmap 保存图片时指定格式
     */
    public static final enum CompressFormat
    {
        JPEG,
        PNG,
        WEBP,
        ;
    }
    /**
     * Bitmap的配置
     * 指定Biymap的透明度和颜色配比等
     */
    public static final enum Config
    {
        ALPHA_8,
        ARGB_4444,
        ARGB_8888,
        RGB_565,
        ;
    }
在这些方法与枚举里面有很多值得我们研究的东西了,接下来就让我带大家来领略一下这个神奇的Bitmap类吧!
@如何实例化Bitmap ,请看代码
1. InputStream mIn=new FileInputStream("Bitmap.jpg"); 
       Bitmap mBit = new BitmapFactor().decodeStream(mIn);
2. Bitmap mBit = new BitmapFactor().decodeFile("http//csdn.blog.com/hlm520/Bitmap.jpg");
正如上面代码所呈现的,实例化Bitmap其实有不同的方式,但偏偏就不能由Bitmap这个类来获取实例,而是通过BitmapFactory来实现的。显而易见Factory意思就是加工厂的意思,也就是说我们可以通过这个类进行Bitmap的大部分操作。那么代码中有两个部分:第一部分,我们先通过实例一个OutputStream获得一个输入流,而这个流持有我们想要的图片,那么只要把这个流传入decodeStream( )中就可以对这个流进行解析,从而得到对应的Bitmap实例,注意这时候的Bitmap已经是一个持有图片的类了,这时就可以与ImageView结合使其在ImageView中呈现了,不过这部分可是下节的内容哦!;第二部分,同样是一个实例Bitmap的例子,不过这时没有了流,直接传入图片地址就行了。不过从执行效率来看本人建议使用流的那个方法!!!
@如何将获得的Bitmap另存至指定文件夹,同样先看代码
1. InputStream mIn=new FileInputStream("Bitmap.jpg");//这里需要捕抓异常,加个try  catch
   Bitmap mBit = new BitmapFactor().decodeStream(mIn);
   if(mBit!=null)
     {
      Bitmap.CompressFormat  mBC=new Bitmap().CompressFormat.PNG;
      OutputStream mOut=new OutputStream("hlm2016.png");
      mBit.compres(mBC,50,mOut) ;
      mOut.flush();
      mOut.close();
     }
在这段代码中我们同样获得一个Bitmao实例,然后如果mBit不为空,则开始图片另存的操作,首先获得一个图片的保存格式为PNG,这里就使用到了CompressFormat这个内部枚举,其实还可以是JPEG或WEBP格式。不过最后用WEBP吧,因为它可以进行无损压缩,也是网络图片传输经常用到的;然后我们获得一个输出流,这个流指定来图片要保存的地址,同时为图片的快速存储提供可能性,亲测流技术相当快!然后,就是将实例过的mBit作为输出对象,调用compress方法,传入参数依次是(图片格式Format,图片质量 quality,输出流 stream),在最后我们将整个流刷新后清空,这时图片就被存入指定文件中了,是不是很简单呢!
其实还可以对Bitmap进行一些更高级的配置,不过担心大家喘不过气今天就先休息休息吧,不过在介绍我做的--Android动画SDK--源码时应该会把Bitmap的高级配置说透的。这里附上上次关于Android动画开篇的文章链接点击即可(想要继续了解下去的可以关注我一下,方便为您推送这一动画系列的文章)


推荐阅读
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
author-avatar
黑旦儿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有