初学Android,图形图像之使用Bitmap和BitmapFactory(二十四)

news/2024/7/8 5:25:16 标签: android, 图形, button, image, null, class
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

Bitmap代表一张位图,BitmapDrawable里封装的图片就是一个Bitmap对象.把Bitmap对象包装成BitmapDrawable对象,可以调用Bitmapdrawable的构造器

BitmapDrawable drawable = new BitmapDrawable(bitmap);

如果要获取BitmapDrawable所包装的bitmap对象,可以调用getBitmap()方法

Bitmap bitmap = drawable.getBitmap();

如果需要访问其它存储路径的图片,需要借助于BitmapFactory来解析,创建Bitmap对象

下面制作一个assets/文件夹下图片的图片查看器,在assets下随便放几张图像文件

class="language-java">package WangLi.Graphics.BitmapTest;

import java.io.IOException;
import java.io.InputStream;

import class="tags" href="/tags/ANDROID.html" title=android>android.app.Activity;
import class="tags" href="/tags/ANDROID.html" title=android>android.content.res.AssetManager;
import class="tags" href="/tags/ANDROID.html" title=android>android.graphics.BitmapFactory;
import class="tags" href="/tags/ANDROID.html" title=android>android.graphics.drawable.BitmapDrawable;
import class="tags" href="/tags/ANDROID.html" title=android>android.os.Bundle;
import class="tags" href="/tags/ANDROID.html" title=android>android.view.View;
import class="tags" href="/tags/ANDROID.html" title=android>android.view.View.OnClickListener;
import class="tags" href="/tags/ANDROID.html" title=android>android.widget.Button;
import class="tags" href="/tags/ANDROID.html" title=android>android.widget.ImageView;

public class BitmapTest extends Activity {
    /** Called when the activity is first created. */
	String[] class="tags" href="/tags/IMAGE.html" title=image>images = class="tags" href="/tags/NULL.html" title=null>null;
	AssetManager assets = class="tags" href="/tags/NULL.html" title=null>null;
	int currentImg = 0;
	ImageView class="tags" href="/tags/IMAGE.html" title=image>image;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        class="tags" href="/tags/IMAGE.html" title=image>image = (ImageView)findViewById(R.id.class="tags" href="/tags/IMAGE.html" title=image>image);
        try
        {
        	assets = getAssets();
        	//获取/assets/目录下所有文件
        	class="tags" href="/tags/IMAGE.html" title=image>images = assets.list("");
        }
        catch(IOException e)
        {
        	e.printStackTrace();
        }
        //获取bn按钮
        final Button next = (Button)findViewById(R.id.next);
        //为bn按钮绑定事件监听器,该监听器将会查看下一张图片
        next.setOnClickListener(new OnClickListener(){
        	public void onClick(View sources)
        	{
        		//如果发生数组越界
        		if(currentImg >= class="tags" href="/tags/IMAGE.html" title=image>images.length)
        		{
        			currentImg = 0;
        		}
        		//找到下一个图片文件
        		while(!class="tags" href="/tags/IMAGE.html" title=image>images[currentImg].endsWith(".png")
        				&& !class="tags" href="/tags/IMAGE.html" title=image>images[currentImg].endsWith(".jpg")
        				&& !class="tags" href="/tags/IMAGE.html" title=image>images[currentImg].endsWith(".gif"))
        		{
        			currentImg++;
        			//如果已发生数组越界
        			if(currentImg >= class="tags" href="/tags/IMAGE.html" title=image>images.length)
        			{
        				currentImg = 0;
        			}
        		}
        		InputStream assetFile = class="tags" href="/tags/NULL.html" title=null>null;
        		try
        		{
        			//打开指定的资源对应的输入流
        			assetFile = assets.open(class="tags" href="/tags/IMAGE.html" title=image>images[currentImg++]);
        		}
        		catch(IOException e)
        		{
        			e.printStackTrace();
        		}
        		BitmapDrawable bitmapDrawable = (BitmapDrawable)class="tags" href="/tags/IMAGE.html" title=image>image.getDrawable();
        		//如果图片还未回收,先强制回收该图片 
        		if(bitmapDrawable!=class="tags" href="/tags/NULL.html" title=null>null &&
        				!bitmapDrawable.getBitmap().isRecycled())
        		{
        			bitmapDrawable.getBitmap().recycle();
        		}
        		//改变ImageView显示的图片
        		class="tags" href="/tags/IMAGE.html" title=image>image.setImageBitmap(BitmapFactory.decodeStream(assetFile));
        	}
        });
    }
}
每点一次按钮,ImageView的图片就会切换到另一张


点一下按钮


一直点下去,循环出现文件夹下的图片

另外在测试过程中,感觉图片加载的比较慢,不知道有什么优化的方法?


http://www.niftyadmin.cn/n/1411387.html

相关文章

初学Android,图形图像之使用Canvas,Paint绘图(二十五)

下面是一个画各种图形的例子,具体的画图方法不用特别解释,看API就可以了 先定义一个继承自View的类DrawViewpackage WangLi.Graphics.MyView;import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import a…

Rodeo —— 以数据为中心的 Python 开发环境

Rodeo 是一个以数据为中心的 Python 集成开发环境,基于 Web 浏览器使用。 安装: $ pip install rodeo $ rodeo .Execute scripts Run analysisAutocomplete https://yqfile.alicdn.com/5b6367689b9e1a3f602d0601c663fb34d4596f8b.png" >Inspect…

react-router-dom示例讲解(一)——基本使用

在react-router-dom的官方教程中,一共给出12个示例,但是个人认为,着12个示例看着真的很累人,很多写法,不是标准的企业项目应用的写法,所以针对这个现状,我想用企业项目开发的要求,对…

华为和红帽合作共同推进开源电信软件发展

电信运营商是世界上要求最高和需求最大的技术客户。 ——AT&T 类似 AT&T 的大型电信运营商,明确了信息技术供应商需要更多灵活的大规模网络选项,用来满足新服务和降低成本的要求。他们势必要重建他们的网络,使用由开源软件控制的极其…

初学Android,图形图像之使用Path类(二十六)

Path类可以预先在View上将N个点连成一条"路径",然后调用Canvas的drawPath(path,paint)即可沿着路径绘制图形 Android还为路径绘制提供了PathEffect来定义绘制效果,PathEffect包含如下子类 ComposePathEffect CornerPathEffect DashPathEffect DiscretePathEffect Pat…

react-router-dom示例讲解(二)——url路径参数

react-router-dom的官方教程中,第二个示例是路径参数,是一个比较简单的示例。这个示例给了我们一个如何匹配路径参数的示例或者方法。 本示例实现的效果如下: 在路由设计中,我是这样实现的: import React, { Comp…

【windows下配置host的作用】

Winxp下的:\WINDOWS\system32\drivers\etc\hosts文件用记事本打开hosts文件,它的作用是包含IP地址和Host name(主机名)的映射关系,是一个映射IP地址和Hostname(主机名)的规定,规定要求每段只能包括一个映射关系,IP地址…

初学Android,图形图像之使用双缓冲画图(二十七)

当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象,为了解决这些问题,可采用双缓冲技术来绘图。双缓冲即在内存中创建一个与屏幕绘图区域一致的对象,先将图形绘制到内存中的这个对象上&#…