热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Android开发-----显示长图

问题ImageView加载长图的时候,由于有长度上的限制,所以遇到过长图片的时候,无法完全显示,解决方案方法一:使用subsampling-scale-image

; new ShowLongImgAsyncTask().execute(path); }
/** * 自定义AsyncTask */ class ShowLongImgAsyncTask extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); imageView.setImageBitmap(null); }
@Override
protected void onPostExecute(File result) { super.onPostExecute(result); if (result != null) { if (file != null && file.exists()) { Bitmap bitmap = BitmapFactory.decodeFile(result.getAbsolutePath(), getBitmapOption(1)); imageView.setImageBitmap(bitmap); } } else { System.out.println("---------文件为null-----------"); } }
@Override
protected File doInBackground(String... params) { File b = getImageBitmap(params[0]); return b; } }

/** * HttpUrlConnection访问网络 * 并下载图片到本地 * @param url * @return */ private File getImageBitmap(String url) { URL imgurl = null; Bitmap bitmap = null; File file = null; HttpURLConnection urlConnection; try { imgurl = new URL(url); urlConnection = (HttpURLConnection) imgurl.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.connect(); InputStream is = urlConnection.getInputStream(); //构建一个file对象用于存储图片 file = new File(Environment.getExternalStorageDirectory(), "pic.jpg"); fos = new FileOutputStream(file); int len = 0; byte[] buffer = new byte[1024]; //将输入流写入到我们定义好的文件中 while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); }

is.close(); fos.close(); }
catch (IOException e) { e.printStackTrace(); } return file; }
/** * 设置Bitmap的Options */ private BitmapFactory.Options getBitmapOption(int inSampleSize) { System.gc(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inPurgeable = true; options.inSampleSize = inSampleSize; return options; }

 

这个和方法二都是将图片下载到本地,然后转为Bitmap设置给ImageView, 
但是如果不存文件,而是直接一个Bitmap,也能实现同样的效果

/**
* HttpUrlConnection访问网络
* 并下载图片到本地
* @param url
* @return
*/
private Bitmap getImageBitmap(String url) {
    URL imgurl = null;
    Bitmap bitmap = null;
    File file = null;
    HttpURLConnection urlConnection;
    try {
        imgurl = new URL(url);
        urlConnection = (HttpURLConnection)
        imgurl.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.connect();
        InputStream is = urlConnection.getInputStream();
        bitmap = BitmapFactory.decodeStream(is);
        is.close();
        return bitmap;
    } catch (IOException e) {
        e.printStackTrace();
}
return null; }
class ShowLongImgAsyncTask extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); imageView.setImageBitmap(null); }
@Override
protected void onPostExecute(Bitmap result) { super.onPostExecute(result); if (result != null) { if (file != null && file.exists()) { imageView.setImageBitmap(result); } } else { System.out.println("---------文件为null-----------"); } }
@Override
protected Bitmap doInBackground(String... params) { Bitmap b = getImageBitmap(params[0]); return b; } }

!!!不要忘记设置

android:adjustViewBounds="true"

由此方法一和方法二可推测,使用方式或框架,将图片下载到本地,然后经bitmap处理,都应该能正常显示

方法四:快速解决方案 使用WebView

在做这个功能的时候,突发奇想,既然WebView是可以加载一个链接地址的,那么从网络获取的图片也是一个链接地址,那么应该也可以使用WebView来解决这个长图的问题

webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("http://192.168.3.162:8080/gotoclass/test.jpg");

但是如果仅仅这么做,图片有可能在宽度上出现显示问题,所以还要让它适应屏幕缩放

WebSettings settings = webView.getSettings();
// 设置可任意缩放
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);

 

方法五:BitmapRegionDecoder

  还有一种是通过BitmapRegionDecoder来显示局部图片一点点加载的,似乎可行,由于项目时间紧,没有仔细研究

 

如有错误, 敬请指正, 感激不尽!


推荐阅读
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 本文介绍如何使用Python进行文本处理,包括分词和生成词云图。通过整合多个文本文件、去除停用词并生成词云图,展示文本数据的可视化分析方法。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 本周信息安全小组主要进行了CTF竞赛相关技能的学习,包括HTML和CSS的基础知识、逆向工程的初步探索以及整数溢出漏洞的学习。此外,还掌握了Linux命令行操作及互联网工作原理的基本概念。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
author-avatar
小白学习
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有