GWT 中实现“CSS Sprite”
近段时间在弄GWT这一块,开发中遇到的一些不错的方法或者技巧,在此做个分享和记录,有不同见解可发表意见 互相切磋。
在web开发中,必然涉及到网页中的图片,本地浏览网页,要下载在服务器端的图片,然后才能正常浏览。那么浏览器从服务器上下载资源时,时间都耗在TCP/IP的连接,然后服务器还要准备资源。如果一个网页中有几十甚至上百张图片的话,其中消耗的时间可想而知。在普通的html网页中,我们可以把所有的一些常用图标放在一张图片中,然后通过"background-positon:x y"来定位,我们称之为"CSS Sprite"。但这确实是一件费力费时的事,要事先计算好每个图片的坐标。
下图是亚马逊的图标的一部分:

在GWT中也时常要引用图片,它也提供了这样的方法,我称之为GWT的"CSS Sprite",不过它实现比较简单,不用把图片合并一张图片然后自己计算坐标。它使用ClientBundle接口,借助它的注解功能实现。(本人使用的是GWT2.5,之前使用ImageBundle可以,后来发现该类已经@Deprecated了)
要是有ClientBundle接口,首先需要在gwt.xml文件中加入如下代码:
<inherits name="com.google.gwt.resources.Resources" />
然后写一个接口继承ClientBundle:
import com.google.gwt.resources.client.ClientBundle;
import com.google.gwt.resources.client.ImageResource; public interface MyImageBundle extends ClientBundle {
@Source("201.png")
ImageResource upicon(); @Source("202.png")
ImageResource downicon();
}
其中5行与8行声明使用的图片名称,此处只写名称是因为该图片和java类放在一个文件夹下,如果放在其他位置,需要加入对应的地址。
6行与8行声明两个方法,返回类型是ImageResource,根据Google官方文档,查到可以返回类型较多,有TextResource可用于I18N,DataResource用于返回对应数据资源,ExternalTextResource和TextResource一样,返回txt文档,只不过前者是异步获取,返回一个方法,CssResource用于返回css文件,关于更多方法,详细说明可以参照文档:http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html
然后在我们的GWT项目的入口类里添加控件,并把图片添加进去:
public class Test implements EntryPoint {
private final MyImageBundle imgBundle = GWT.create(MyImageBundle.class);
/**
* This is the entry point method.
*/
private Image firImg;
private Image lasImg;
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();
VerticalPanel panel = new VerticalPanel();
panel.setWidth("700px");
SimplePanel simple = new SimplePanel();
SimplePanel simple2 = new SimplePanel();
firImg = new Image(imgBundle.downicon());//获取图片资源
lasImg = new Image(imgBundle.upicon());
simple.add(firImg);
simple2.setWidget(lasImg);
panel.add(simple);
panel.add(simple2);
rootPanel.add(panel);
}
}
第三行是通过GWT.create()方法获取该类。第16和第17行通过该类写的方法,获取到对应的图片。
最后 我们在eclipse中开始编译项目。在"war-项目名"目录下,会生成类似于"74EBE333D8BEBF96EA4673E8E087D621.cache.png"这样的一张名称很"crazy"的图片,打开后,会发现是刚才那两张图片合并在一起的,就是这么神奇!
GWT 中实现“CSS Sprite”的更多相关文章
- css sprite 调整大张图片中小图标的大小
直接说解决方法: 假设一张拼合好的大图大小是:900 x 1000 px (如上图) 现在想取图中左上角的河马图标,并缩小图标的大小. 正常取图: .sprite { background: url( ...
- css sprite,css雪碧图生成工具V3.0更新
V3.0主要改进 1.增加了单独添加单张图片以及删除单张图片的功能 2.增加了生成.sprite文件用以保存雪碧图信息 3.增加了打开.sprite文件功能 什么是css sprite CSS spr ...
- CSS Sprite雪碧图应用
在写网页过程中,会遇到这种需要使用多个小图标: 如上图中的「女装」文字左边的图标.容易想到的解决方法是为每张图片加入<img>标签,但这样做会增加HTTP请求数量,影响网站加载速度.比这更 ...
- CSS Sprite 图标
HTML <body> <!-- ul.sprite>li*5>s.s-icon+a{CSS Sprite} --> <!-- 以上是Sublime Text ...
- CSS Sprite 雪碧图制作
CSS Sprite 雪碧图,简单来说就是: 为了提高网页的性能,减少加载次数,将一些不会经常随网站内容变化的小图标,集中放在一张大图上,将该图应作为background-image 嵌入页面中,在需 ...
- CSS Sprite的优缺点分析
目前大多数的开发人员对这个技术都有相当地掌握,也有很多关于它的教程和文章.几乎所有的文章中都宣称设计师和开发人员都应该使用 CSS sprite 来减少 HTTP 请求数,并且节省一些流量.这个技术被 ...
- gwt中java与js的相互调用
1. java通过jsni调用内部js Button button = new Button("java调用内部jsni的js方法"); button.addClickHandle ...
- GWT中实现跳转及不同entrypoint怎么互相访问
怎么跳转? 跳转这个概念这里指的是从一个web页面跳转到另一个web页面,如果我们使用gwt来开发web,很自然的我们会想到怎么从一个gwt做的页面跳转到另一个gwt做的页面. 但从网上的gwt例子来 ...
- css雪碧(CSS Sprite)和css3过渡效果综合应用
在网页中我们经常可以看到,有些图片在鼠标经过的时候,有一个上下或左右的滑动效果,很实用页很方便,今天正好用到,拿来和大家分享一下,有什么不对或意见欢迎指正. html部分如下,这里本来打算用jq来着, ...
随机推荐
- php数组函数-array_key_exists()
array_key_exists()函数判断某个数组中是否存在指定的key,如果key存 在,则返回true,否则返回flase array_key_exists(key,array); key:必需 ...
- Django 组合索引
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join( ...
- IntelliJ Idea 快捷键精选
Alt+Enter,导入包,自动修正Ctrl+F,查找文本Alt+Up/Down,上/下移一行:在方法间快速移动定位:与光标位置有关Alt+Shift+Up,多次up可选中一行Ctrl+X,剪切行Ct ...
- 【bzoj1925】地精部落[SDOI2010](dp)
题目传送门:1925: [Sdoi2010]地精部落 这道题,,,首先可以一眼看出他是要我们求由1~n的排列组成,并且抖来抖去的序列的方案数.然后再看一眼数据范围,,,似乎是O(n^2)的dp?然后各 ...
- java深入探究08-连接池,分页
1.连接池 1)自定义连接池 思路:定义一个类Pool->添加4个属性(最大连接数,初始化连接数,当前连接数,用来存放连接对象的LinkList集合对象)->定义一个createConne ...
- SCOI2017酱油记
Day0: 虽然是8点30开始模拟赛,还是设了个7点的闹钟调节生物钟.结果硬生生睡到7点40... 打开题目:T1期望,直接弃掉(到现在都不会期望已经可以滚粗了..) T2一眼可做,恩,先写个暴力.然 ...
- tp5定时器
# 定时器 * * * * * cd /home/wwwroot/default/dexin/dragon && /usr/bin/php think order --option 1 ...
- Liberty glance 新功能 healthcheck
oslo.middleware‘s healthcheck http://specs.openstack.org/openstack/oslo-specs/specs/kilo/oslo-middle ...
- 编写TreeSet类的实现程序,其中相关的迭代器使用二叉查找树
package com.test.tree; import java.util.Iterator; /** * 编写TreeSet类的实现程序,其中相关的迭代器使用二叉查找树. * 在每个节点上添加一 ...
- Redis主键失效 - 原理及实现机制
[数据记录过期源码][http://blog.csdn.net/yuanrxdu/article/details/21233047] [http://blog.jobbole.com/71095/] ...