Android控件组合应用七(结局,附源码)

2024-04-07 11:32

本文主要是介绍Android控件组合应用七(结局,附源码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接上一篇,我们来处理一下微博中的图片部分。

前文中我们利用WebView来处理URL中的图片显示,并且基本能达到目标,但是还是有一两处细节需要处理,以提升用户体验。

一是在下载图片的过程中需要显示一个背景图,让用户先知道那里会出现图片,而不是一片空白。

二是图片下来以后,要根据图片的大小动态调整显示效果,不能出现WebView太大而图片太小时的白边。

 

由此,我们从WebView继承一个PictureWebView专门解决上面这两个问题。

首先,我们要为这个PictureWebView实现WebView.PictureListener接口,该接口提供的

public abstract void onNewPicture(WebView view, Picture picture)

方法用于在图片改变时发出通知。代码如下,其中的picture是一个Picture类型的成员变量。

 

view plain
  1. @Override  
  2. public void onNewPicture(WebView view, Picture picture) {  
  3.     if (picture!=null){  
  4.         this.picture=picture;  
  5.         DisplayMetrics dm=getContext().getResources().getDisplayMetrics();  
  6.         int width=(int) (picture.getWidth()*dm.density);  
  7.         int height=(int) (picture.getHeight()*dm.density);  
  8.         setPictureListener(null);  
  9.         ViewGroup.LayoutParams lp=getLayoutParams();  
  10.         lp.width=width;  
  11.         lp.height=height;  
  12.         setLayoutParams(lp);  
  13.     }     
  14. }  
 

 

注意到这里已经根据picture大小调整了控件的布局。因为我们这个PictureWebView的每个实例针对的只是一条微博中的图片URL,因此这里不关注WebView中其他的可显示元素。

 

接下来,为了更好的处理第二个问题,我们改写一下onDraw()方法,进行背景和图片的绘制。代码如下:

 

view plain
  1. @Override  
  2. protected void onDraw(Canvas canvas) {  
  3.     super.onDraw(canvas);  
  4.     if (picture==null){  
  5.         Drawable background=this.getBackground();  
  6.         if (background!=null){  
  7.             background.setBounds(0,0,background.getIntrinsicWidth(),background.getIntrinsicHeight());  
  8.             background.draw(canvas);  
  9.         }  
  10.     }  
  11. }  
 

 

这样,一个定制的WebView就实现了,修改blogview.xml布局文件中的WebView控件为PictureWebView即可,代码如下:

 

view plain
  1. <com.wenbin.test.PictureWebView android:id="@+id/profileImage"  
  2.     android:layout_width="48dp"  
  3.     android:layout_height="48dp"  
  4.     android:scrollbars="none"  
  5.     android:layout_alignParentLeft="true"  
  6.     android:background="@drawable/portrait">  
  7. </com.wenbin.test.PictureWebView>  

 

 

运行程序,无论是头像还是微博中的图片,在未下载完时是显示背景图的,下载完后会自动调整布局进行适应,而且不存在无用的边框。截图见《Android控件组合应用一》一文。

 

结语:本来想在一篇中写完,但篇幅太长,所以分割成了这许多部分。而且也没想到CSDN勤劳的小编在第一篇文章刚出时就盖了“推荐”的章,然后我就开始熬夜赶工了。在代码中没有注重算法之类的事情,也没有达到商用的程度,主要还是通过模仿新浪微博的客户端界面来灵活应用一下Android的控件,同时也可以看到Android框架带给开发人员的灵活程度。

 

附上全部的源码和资源供参考(该程序在MOTOROLA milestone Android 2.1上进行了测试,其中的部分资源来源于新浪微博,仅供学习测试之用)。

 

点此下载源码

 

——欢迎转载,转载请注明出处 http://blog.csdn.net/caowenbin ——


这篇关于Android控件组合应用七(结局,附源码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882480

相关文章

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单