Android ListView添加Bitmap

华为OD机试双机位C卷:日志排序 (Py/C/C++/Java/Js/Go) 华为OD机试双机C卷真题【日志排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试-日志排序。 阅读详情

在自定义的simpleAdapter中,显示的图片资源都是程序内的本地资源,而且是以资源的ID(Resources)形式来表现的,有时候需要添加Bitmap。要想让ListView能显示Bitmap这是关键的代码。

simpleAdapter.setViewBinder(new ViewBinder() {
       	 
            @Override
            public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
            	if(view instanceof ImageView && data instanceof Bitmap){  
                    ImageView i = (ImageView)view;  
                    i.setImageBitmap((Bitmap) data);  
                    return true;  
                }  
                return false;
            }
        });

下面的一个demo是下载一张图片,并且显示在ListView中。

itemlist.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" >
    
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        
        <TextView 
            android:id="@+id/TITLE_ID"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="20dp"
            android:text="这是标题"/>
       
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        
        <TextView 
            android:id="@+id/CONTENT_ID"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingTop="20dp"
            android:text="这是内容"/>
        
        <ImageView 
            android:id="@+id/IMAG_ID"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:layout_marginLeft="220dp"
            android:layout_toRightOf="@id/CONTENT_ID"/>
        
    </RelativeLayout>
    
    
</LinearLayout>

mainActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".NewsActivity" >


    <ListView 
        android:id="@+id/LISTVIEW_ID"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <ImageView 
        android:id="@+id/IMAGE_ID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>

Activity.java里面有些是测试的代码,看下面的关键代码即可

package com.example.baidunews;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.util.StringBuilderPrinter;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;

public class NewsActivity extends Activity {

	private String Url = "https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png" ;
	private ListView listView ;
	private ArrayList<	HashMap<String, Object> >itemData = new ArrayList<HashMap<String,Object>>() ;
	private Bitmap bitMap  ;
	public StringBuilder str = new StringBuilder();
	public String s  ;
	private ImageView imageView ;
	private Util myUtil = new Util();
	private Handler handler ;
	private SimpleAdapter simpleAdapter ;
	private MyAsyncTask myAsyncTask = new MyAsyncTask() ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news);
        
        handler = new Handler(){      	
        	@Override
        	public void handleMessage(Message msg){
        		str.append("as") ;
        		simpleAdapter.notifyDataSetChanged() ;      		
        	}
        } ;
        
        imageView = (ImageView) findViewById(R.id.IMAGE_ID) ;
        listView = (ListView) findViewById(R.id.LISTVIEW_ID) ;    
        simpleAdapter = new SimpleAdapter(this,itemData,R.layout.itemlist,
        		new String[]{"title","content","image"} ,new int[]{R.id.TITLE_ID,R.id.CONTENT_ID,R.id.IMAG_ID}) ;
        simpleAdapter.setViewBinder(new ViewBinder() {
       	 
            @Override
            public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
            	if(view instanceof ImageView && data instanceof Bitmap){  
                    ImageView i = (ImageView)view;  
                    i.setImageBitmap((Bitmap) data);  
                    return true;  
                }  
                return false;
            }
        });
        
        
        myAsyncTask.execute(Url) ;  
       // dosome() ;
        //getData() ;
        listView.setAdapter(simpleAdapter) ;
       // imageView.setImageBitmap(bitMap) ;
        
    }

    
    public void dosome(){
    	new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				try {
    	            // 使用HttpURLConnection打开连接
    	            HttpClient httpClient = new DefaultHttpClient() ;
    	            HttpGet httpGet = new HttpGet("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png") ;
    	            HttpResponse httpResponse = httpClient.execute(httpGet) ;
    	            HttpEntity entity = httpResponse.getEntity() ;
    	            // 将得到的数据转化成InputStream
    	            InputStream is = entity.getContent();
    	            // 将InputStream转换成Bitmap
    	            bitMap = BitmapFactory.decodeStream(is);
    	            is.close();
    	            int i = 0;  
    	        } catch (MalformedURLException e) {
    	            // TODO Auto-generated catch block
    	            System.out.println("[getNetWorkBitmap->]MalformedURLException");
    	            e.printStackTrace();
    	        } catch (IOException e) {
    	            System.out.println("[getNetWorkBitmap->]IOException");
    	            e.printStackTrace();
    	        }
				handler.sendEmptyMessage(0) ;
			}
			
		}).start() ;
    	
    }
    

    public void getData(){
    	HashMap<String, Object> elem = new HashMap<String, Object>() ;
    	elem.put("title", str) ;
    	elem.put("content","内容1") ;
    	elem.put("image",bitMap);
    	itemData.add(elem) ;
    }
    
    
    public class MyAsyncTask extends AsyncTask<String, Integer , String>{
    
    	@Override
    	public String doInBackground(String...params){
    		
    		 try {
    	            // 使用HttpURLConnection打开连接
    	            HttpClient httpClient = new DefaultHttpClient() ;
    	            HttpGet httpGet = new HttpGet("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png") ;
    	            HttpResponse httpResponse = httpClient.execute(httpGet) ;
    	            HttpEntity entity = httpResponse.getEntity() ;
    	            // 将得到的数据转化成InputStream
    	            InputStream is = entity.getContent();
    	            // 将InputStream转换成Bitmap
    	            bitMap = BitmapFactory.decodeStream(is);
    	            is.close();
    	            int i = 0;  
    	        } catch (MalformedURLException e) {
    	            // TODO Auto-generated catch block
    	            System.out.println("[getNetWorkBitmap->]MalformedURLException");
    	            e.printStackTrace();
    	        } catch (IOException e) {
    	            System.out.println("[getNetWorkBitmap->]IOException");
    	            e.printStackTrace();
    	        }
    		 
    		return "" ;
    	}

		@Override
    	public void onPostExecute(String str1){
			HashMap<String, Object> elem = new HashMap<String, Object>() ;
	    	elem.put("title", "标题1") ;
	    	elem.put("content","内容1") ;
	    	elem.put("image", bitMap);
	    	itemData.add(elem) ;
	    	listView.setAdapter(simpleAdapter) ;
	    	//simpleAdapter.notifyDataSetChanged() ;
    		//imageView.setImageBitmap(bitMap) ;
	        
    	}	 
    } 
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.news, menu);
        return true;
    }
    
}




关键代码,下载图片

 public class MyAsyncTask extends AsyncTask<String, Integer , String>{
    
    	@Override
    	public String doInBackground(String...params){
    		
    		 try {
    	            // 使用HttpURLConnection打开连接
    	            HttpClient httpClient = new DefaultHttpClient() ;
    	            HttpGet httpGet = new HttpGet("https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png") ;
    	            HttpResponse httpResponse = httpClient.execute(httpGet) ;
    	            HttpEntity entity = httpResponse.getEntity() ;
    	            // 将得到的数据转化成InputStream
    	            InputStream is = entity.getContent();
    	            // 将InputStream转换成Bitmap
    	            bitMap = BitmapFactory.decodeStream(is);
    	            is.close();
    	            int i = 0;  
    	        } catch (MalformedURLException e) {
    	            // TODO Auto-generated catch block
    	            System.out.println("[getNetWorkBitmap->]MalformedURLException");
    	            e.printStackTrace();
    	        } catch (IOException e) {
    	            System.out.println("[getNetWorkBitmap->]IOException");
    	            e.printStackTrace();
    	        }
    		 
    		return "" ;
    	}

		@Override
    	public void onPostExecute(String str1){
			HashMap<String, Object> elem = new HashMap<String, Object>() ;
	    	elem.put("title", "标题1") ;
	    	elem.put("content","内容1") ;
	    	elem.put("image", bitMap);
	    	itemData.add(elem) ;
	    	listView.setAdapter(simpleAdapter) ;
	    	//simpleAdapter.notifyDataSetChanged() ;
    		//imageView.setImageBitmap(bitMap) ;
	        
    	}	 
    } 

关键代码,SimpleAdapter的创建

 simpleAdapter = new SimpleAdapter(this,itemData,R.layout.itemlist,
        		new String[]{"title","content","image"} ,new int[]{R.id.TITLE_ID,R.id.CONTENT_ID,R.id.IMAG_ID}) ;
        simpleAdapter.setViewBinder(new ViewBinder() {
       	 
            @Override
            public boolean setViewValue(View view, Object data,
                    String textRepresentation) {
            	if(view instanceof ImageView && data instanceof Bitmap){  
                    ImageView i = (ImageView)view;  
                    i.setImageBitmap((Bitmap) data);  
                    return true;  
                }  
                return false;
            }
        });


DeepSeek如何构建可扩展的 AI 驱动交易系统,基于 MetaTrader 5 与 Python 利用先进的数据处理、机器学习和容器化部署来优化算法交易。 MT5 Python API 架构设计分为三层:通信层:利用异步消息传递(例如 ZeroMQ 或标准套接字编程)支持每秒数万个数据请求。转换层: C++ 动态库有效地将 MT5 命令转换为 Python 对象(反之亦然),从而优化速度和内存使用率。接口层:提供Pythonic API,封装了所有终端功能,包括:1)实时价格订阅(滴答或秒级更新)2)历史数据检索(从M1到更高的时间范围)3)订单流监控(交易详情和市场深度)4)策略执行引擎(用于算法交易) 阅读详情

相关推荐

PHP实战:5分钟搞定SM4国密加密算法集成(附完整代码)

本文详细介绍了如何在PHP项目中快速集成SM4国密加密算法,提供完整的代码实现和实际应用示例。从算法原理到核心代码解析,再到性能优化与安全实践,帮助开发者高效实现数据加密功能,满足金融、政务等领域的合规需求。

weixin_29315569的博客 354

android bitmap 加载,Android进阶之Bitmap的高效加载

一、Bitmap的加载BitmapFactory提供了四个方法:docodeFilesdecodeResourcedecodeStreamdecodeByteArray二、Bitmap的高效加载采用Bitmap.Options来加载所需尺寸的图片,主要使用它的inSampleSize参数,当inSampleSize大于1缩放。(inSampleSize会向下去2的指数)高效加载图片的流程:将Bit...

weixin_42536058的博客 475

OpenAI,从推出更强大的Sora 2模型展开探索与未来发展前景+部署方法大全+文末邀请码*12

摘要 OpenAI推出的Sora 2是第二代AI视频生成模型,在多模态内容生成领域实现重大突破。文末足足有12个邀请码,速来速享!!!

aqfcca的博客 2248

【转载】如何在ListView中显示Bitmap图像

http://hi.baidu.com/android_frank/blog/item/a9ead4fbbfd44bdd0b46e046.html 我在一个小项目中需要用到将SD卡中的图片读出后,压缩,再进行显示。在编程过程中,使用SimpleAdapter适配器时,图片资源的ID均需是程序内的本地资源。在网上找到了两个实现方法,第一个我验证了可以实现,第二个比较繁琐还未验证。 1.实现View...

jishublog 415

Isograph Reliability Workbench 14实战:从零构建故障树分析模型

本文以“马达不转”为例,手把手教你使用Isograph Reliability Workbench 14从零构建故障树分析模型。内容涵盖创建工程、定义顶事件、添加逻辑门与基础事件等核心步骤,并介绍了模型检查与定性定量分析,帮助你系统掌握这一强大的可靠性工程工具。

weixin_29309213的博客 359

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值)【含Matlab源码 4887期】

斑马算法优化变分模态分解ZOA-VMD数字信号去噪(优化K值 alpha值) 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 810

高效显示Bitmap+listview冲突解决+图片内存缓存+硬盘缓存

Android高效加载大图BitmapFactory提供了一些解码(decode)的方法(decodeByteArray(), decodeFile(), decodeResource()等),用来从不同 的资源中创建一个Bitmap。 我们应该根据图片的数据源来选择合适的解码方法。 这些方法在构造位图的时候会尝试分配内 存,因此会容易导致 OutOfMemory 的异常。每一种解码方法都可以

fangchao3652 1601

【花雕学编程】Arduino ESP32 SPP 之使用Servo库控制360度舵机正反转

使用 Servo 库控制 360 度舵机的正反转是 Arduino ESP32 SPP 应用中的一个重要案例,具有简易控制接口、灵活速度调节和高兼容性等特点,广泛应用于机器人、自动化装置和动态艺术等领域。在第三个案例中,使用map()函数将用户输入的速度参数(范围0-100)映射到舵机控制的角度(0-180),使得用户能够以更人性化的方式控制舵机速度。5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。

雕爷学编程 1469

Android保存RecycleView整页内容保存为图片

需求场景: 如记事本、备忘录应用产品需要将所记录内容以图片形式分享到其他第三方应用时,需要该功能 https://www.jianshu.com/p/3d03c66cf169?tdsourcetag=s_pctim_aiomsg /** * recycleview截图 * @param view * @return */ public static Bitmap shotRecyclerView(RecyclerView view) {

特立独行的博客 3093

HTML金色流星雨(完整代码)

HTML实现金色流星雨动态效果的完整代码。

AIGC 992

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

statistics+insight+vista+power 903

Android高效加载Bitmap

本篇博客内容: 1.计算合适比例,读取适屏的bitmap 2.开启工作线程,执行读取bitmap的任务 3.在ListView或者GridView中多个Bitmap并发操作 4.内存缓存(LruCache类)和磁盘缓存(DiskLruCache类) 5.UI线程执行ImageView加载工作线程读取到的Bitmap

HeXinGen的博客 1552

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 403

小技巧

<br />1、RelativeLayout标签和ListView组合实现ListView的页眉页脚<br /><?xmlversion="1.0"encoding="utf-8"?> 02<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"03    android:orientation="vertical"android:layout_width="fill_parent"04    android:layo

673

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

my Blackboard

最近几天一直在做一个我起名为Blackboard的application,发现其实android源码里面就有类似的东西,然后我就决定在这个基础上添加一些常用的功能来完善它。从元旦前到今天都一直在纠结FileDialog这个功能的东西,其实我们组长已经写好了的,但是用到我的application里面的时候,总是会出奇奇怪怪的问题,后来就决定先从Blackboard里面分离开来,单独实现FileDia

搬家啦。。。。 776

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android有用代码片段(三)

四十一、数据库写入图片信息: [java] view plain copy print ? "font-family:Tahoma, 'Microsoft Yahei', Simsun;color:#444444;">数据库中的字段设置为 binary类型Bitmap bitmap = BitmapFactory.decodeFile(path);ByteArr

267

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android Studio获取SQLite数据并显示到ListView上

我们在使用ListView的时候需要和数据进行绑定,那么问题来了,如何获取SQLite数据库中的数据并动态的显示到ListView当中呢?其实过程很简单:首先要获取SQLite数据(当然首先你要创建一个SQLite数据库并填写了一些数据),然后引入ListView控件,最后将数据和ListView绑定就好了。 一 获取SQLite数据库中的数据 SQLite是一个轻量级的数据库,它能将数据保存到你...

一直很安静的博客 1万+

Android用listview加载完Bitmap后,Bitmap所占用的内存得不到及时的释放

本帖最后由 wind_wing 于 2011-1-20 16:05 编辑在发这个帖子的时候,我把论坛...

chuangcuicuo2022的博客 483

在listview中添加bitmap位图的方法

遇到一个问题,从servlet获取的bitmap位图需要显示在listview里面,但是发现直接传入位图会报错,原来listview只能传入图片id。最后在网上查找到如下方法。 一般来说,在用simpleAdapter适配器时,我们所要显示的图片资源都是程序内的本地资源,而且是以资源的ID(Resources ID)形式来表现的。但是有时候我们需要用这个适配器来显示网上的远程图片时,该如何直接显

yxg190221的专栏 1314

Android---Bitmap详解

Bitmap开发中的几个常见问题:一张图片被加载成Bitmap后实际占用内存是多大;通过Options.inBitmap可以实现Bitmap的复用,但是有一定的限制;当界面需要展示多张图片,尤其是在列表视图中,可以考虑使用Bitmap缓存;如果需要展示的图片过大,可以考虑使用分片加载的策略。

qq_44950283的博客 1689

listview中的item转成bitmap并绘制

将layout转为bitmap绘制的步骤: 方法一:不将bitmap放入内存缓存当中1、调用measure方法、设置视图的大小,应传入父级的layout的宽高(int类型)2、传入measure的属性,可以通过以下方法进行设置并传入:View.MeasureSpec.makeMeasuereSpec(int width, int model),其中width为view的大小,   model有三种

stay hungry,stay foolish 1300

android在listview中放入从sdcard读取的bitmap

重写viewbinder public class viewbinder_bookmark implements SimpleAdapter.ViewBinder{ @Override public boolean setViewValue(View view, Object data, String textRepresentation){ ...

Liusuzhi19610221的博客 151

举例说明android中Bitmap、ListView以及ImageView的综合使用---显示图片并获取图片的宽和高

程序如下所示: import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.ContextMenu; import android.view.Context

Ada168855的专栏 6357

Android listView 头部添加透明titleBar

效果图如下 activity布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" an

lvshaorong的博客 1338

Android中ListView转成Bitmap并保存本地方法

最近项目中要用到将ListView以图片形式保存本地并即时通讯发送出去,下面是我的实现方法 package com.telewas.yunxing.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graph...

雨打芭蕉的博客 965

listview优化和bitmap简单使用

Listview优化和bitmap分割

NELA的博客 2175
上一篇: Android 实现进入界面时,加载欢迎界面
下一篇: Android 自定义view设置xml属性
CallMeJiaGu
博客等级 码龄12年 149粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值