- 浏览: 732980 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
lingsuch:
Android网络连接判断与处理 -
月光照着我:
写的不错,作为笔记了
Android中LayoutInflater的使用 -
智博王锋:
好文章是要顶的!
Android中LayoutInflater的使用 -
云南白药:
...
Android中LayoutInflater的使用 -
万新one:
理解了许多。解释的不错。3Q.
Android中LayoutInflater的使用
【摘要】
本文诣在展示如何在Swing中引入Android的NinePatch技术(Android早期有文章里中文译作九格图,暂且这么叫吧^_^,但此术非传统移动手机上的功能布局——九格图哦)。
【准备篇】
Q:何为Android的NinePatch技术?
A:说简单点,就是Android平台中用于对图片据屏幕大小进行自动拉伸的技术。更准确的介绍详见此文:http://www.yixieshi.com/ucd/9142.html。
NinePatch技术本身虽微不足道,但它对于Android的UI定制开发来说无疑是相当有价值的。也可直接看官方指南:http://developer.android.com/guide/developing/tools/draw9patch.html。
Q:NinePatch对Swing意味着什么?
A:利用NinePatch技术,比如:你在美化Swing的按钮UI时,再也不用根据不同的按钮大小准备不同的图片了,一张图片解决不同按钮按各自大小自动拉伸填充的问题,多么神奇!
当然,如果你对Android的程序比较熟,或者说对android的程序外观定制比较熟的话,你将会更清楚这一点——Swing的外观定制能力将会因此变的无比灵活和强大,
很多不可能将成为现实。Android程序的外观定制其实有点Java标准平台换肤技术Synth的影子,但显然,这个聪名的小改进,使得Android的外观定制比Swing更容易、更灵活。
Q:Android平台的NinePatch技术可以直接拿到Java标准平台上使用?
A:没错,两个java平台除去UI部份外,本身有很大一部分是可以互相兼容的,具体情况请了解android平台java技术的前世今生。
Q:从何处获得Android平台的NinePatch技术呢?
A:NinePatch技术的核心只有3到4个类,拿过来用就可以了,源码地址可以在此链接找到:
http://www.java2s.com/Open-Source/Android/android-core/platform-sdk/com.android.ninepatch.htm,我打好的包稍
后可以在附件里下载哦。
【准备好.9.png图片】
本图片将使用NinePatch技术作为演示代码中的一JPanel背景进行自动填充之用,用不同的2张图是为了方便进行效果展示:
【测试代码】
package jb2011.t; import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.io.InputStream; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import com.android.ninepatch.NinePatch; /** * 本类用于测试从Android中引入的NinePatch(九格图)技术的可行性. * * @author jb2011@163.com * @version 1.0 */ class Test extends JPanel { //NinePatch作为全局对象,提高性能 private NinePatch mPatch; public Test() { super (new BorderLayout()); //*** 关键代码:读取9格图 START try{ InputStream stream = this .getClass().getResourceAsStream( // "content_bg2.9.png" "content_bg3.9.png" ); mPatch = NinePatch.load(stream, true /* is9Patch*/, false /* convert */); } catch (Exception e){ e.printStackTrace(); } //*** 关键代码:读取9格图 END //加入一个面板,用于演示 JPanel p = new JPanel(); p.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); //该面板设置成背景透明 p.setOpaque(false); this.add(p); //加入演示组件 p.add(new JButton("JButton 1")); p.add(new JButton("JButton 2")); p.add(new JButton("JButton 3")); p.add(new JButton("JButton 4")); } /** * 重写父类方法,以便实现自定义背景的绘制. */ @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; Rectangle clip = g2.getClipBounds(); //*** 关键代码:使用9格图 START //使用9格图绘制面板的背景 mPatch.draw(g2, clip.x, clip.y, clip.width, clip.height); //*** 关键代码:使用9格图 END } public static void main(final String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(); frame.setContentPane(new JPanel(new BorderLayout())); ((JPanel)frame.getContentPane()).setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); frame.getContentPane().add(new Test(), BorderLayout.CENTER); frame.setSize(300,250); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }
【运行效果图】
【附件下载】
测试代码完整Eclipse3.5.2工程(含NinePatch的jar包哦):
http://files.cnblogs.com/jb2011/jb2011blog_testNinePatch.rar
================================================================================
【最后再啰嗦几句】
潜水了很多年,得益于许多无私网友的奉献,越发觉得很有必要与人分享一些东西。接下来将陆续写出“Swing整容”系列文章,
希望对需要的人有用,但因水平确实有限,不喜者还请勿喷,多谢。
有人说,Swing很丑,这话没错,但Swing真的没救了?答案当然是否定的。接下来的文章将会与Swing的L&F有关,谢谢关注。
“民工甲”的“Swing三刀”系列文章给了我最近一次Swing美化工作的部分灵感,非常感谢作者的无私,文章地址是:
http://joshuaxiao.iteye.com/blog/707514。“WilliamChen”的Swing技术文章也是相当不错,可惜多年不更新了,有兴趣的朋
友可以去围观哦,http://blog.sina.com.cn/swingjava。
发表评论
-
JavaSwing实现支持合并拆分的JTable
2010-12-16 15:39 1980GridBagModel:抽象模型接口。该接口用于描述表格中单 ... -
JTable小例子,表格中使用JComboBox下拉按钮
2010-12-16 15:21 5428import java.awt.BorderLayout; ... -
配合滚动面板实现JTable上下翻页的效果
2010-12-16 14:26 3427import java.awt.BorderLayout; ... -
JScrollBar简单演示例子
2010-12-06 19:28 6627import java.awt.*; import java ... -
点击jtable的表头,数据会根据根据表头来排序
2010-12-06 11:47 5141import javax.swing.JFrame; imp ... -
重写JSplitPane的BasicSplitPaneUI
2010-09-18 13:39 1580import java.awt.Color; import ... -
Swing窗口初始最大化的方法
2010-08-20 11:09 79121.设置窗口最大(伪最大化) JFrame frame =n ... -
Tree目录实现拖拽功能演示实例(DragAndDrop)
2010-08-10 16:49 1802import java.awt.BorderLayout; ... -
设置JTextPane指定内容的颜色
2010-05-21 14:29 1372package Assis; import java.a ... -
ScaleImageDemo图像缩小与放大演示
2010-05-12 14:59 2126package Assis; import java.a ... -
TreesDemo
2010-05-04 11:19 1093import java.awt.*; import java ... -
TableDemo
2010-05-04 11:17 1206import javax.swing.JTable; imp ... -
分割面板演示JSplitPaneDemo
2010-05-04 11:12 1400//Java Swing 带分隔条的面板代码 impor ... -
StylesExample8
2010-04-08 12:55 1211import javax.swing.*; import j ... -
StylesExample7
2010-04-08 12:54 1007import javax.swing.*; import j ... -
StylesExample6
2010-04-08 12:52 1071import javax.swing.*; import j ... -
StylesExample5
2010-04-08 12:51 1002import javax.swing.*; import j ... -
StylesExample4
2010-04-08 12:50 1119import javax.swing.*; import j ... -
StylesExample3
2010-04-08 12:50 1013import javax.swing.*; import j ... -
StylesExample2
2010-04-08 12:49 1062import javax.swing.*; import j ...
相关推荐
Android NinePatch 技术
总之,Swing9patch是一个非常有价值的资源库,对于那些希望提升Java Swing应用UI质量的开发者来说,它不仅提供了美观的组件,还减少了设计和实现工作,使得开发者能够更高效地创建出具有专业外观的应用程序。
littleuck是Java Swing跨平台外观(LookAndFeel)实现。 它的名字的灵感来源于我喜欢的一首歌小幸运,在这里把"它"献给所有仍在Swing奋斗的朋友。 功能介绍 窗体使用半透明阴影边框 ...
《Android优化技术详解》这本书是Android开发者深入理解并掌握优化技巧的重要参考资料。它涵盖了从应用程序性能、内存管理、UI流畅性到电量优化等多方面的内容,旨在帮助开发者打造高质量、高性能的Android应用。 1...
Sprite类在Android开发中主要被用于游戏开发或者动画制作中,它是Android对2D图形的一种抽象,通常代表一个可移动或可交互的图像元素。在Android的游戏中,Sprite经常用来表示角色、道具或其他动态显示的对象。这个...
ninepatch-editor-1.25
Ninepatch是Android平台中一种特殊类型的位图资源,主要用于创建可拉伸的图形,尤其在界面设计中极为常见,能够帮助开发者实现灵活自适应的界面元素,如按钮、背景等。 在Android开发中,NinePatch图是一种具有额外...
在Android开发中,有时我们需要对显示的图片进行特殊处理,比如让图片呈现圆角或完全圆形。本知识点将深入探讨如何在Android应用中完美实现图片的圆角和圆形效果。 首先,我们来看如何实现图片的圆角效果。Android...
在Android开发中,SeekBar是一个非常常见的控件,用于让用户选择一个介于最小值和最大值之间的数值。默认的SeekBar样式虽然实用,但在某些情况下可能无法满足我们对界面美观度和个性化的需求。这篇博客将深入探讨...
切片Android样式的9色补丁图像,调整大小并进行交互式预览。 有关9补丁的说明,请参见 。 安装 如果要使用交互式查看器,请阅读“交互式查看器”下的其他安装说明。 $ pip install ninepatch Python用法 from ...
前几年,因对Swing的外观定制有过几次深入实践,因而今年初有了利用NinePatch技术为Swing彻底改头换面一次的想法。 起先没想完全开发一套LNF,因为明知工作量很大(包括编码,更为困难的是美感与视觉效果的确定)...
在Android平台上,2D图形绘制是一项基础且重要的技术,它允许开发者创建丰富的用户界面和动态效果。本主题将深入探讨Android 2D图形绘制的核心概念、API和实践技巧。 首先,Android提供了两种主要的方式来实现2D...
通过研究《坦克大战Android》的源码,开发者不仅可以学习到Android游戏开发的基本技术,还可以深入了解如何在实际项目中运用这些技术,提升自己的开发技能。同时,对于想要创建自己Android游戏的开发者来说,这是一...
在“Android-猎豹'快切App'中用到的Android开发技巧探索”这个主题中,我们可以深入探讨一些Android开发中的关键技术和实践,这些技术在猎豹移动的“快切App”中得到了应用。源码的提供使得我们有机会直接查看和学习...
在Android开发中,创建自定义UI是常见的任务之一,尤其当你需要实现一款具有特定风格的仪表盘时。本文将深入探讨如何利用Android的Canvas、Bitmap和Matrix类来实现一个可旋转的汽车方向盘,从而构建一个功能完备且可...
在这个名为"Android9妹工具(9Patch)_android源码.zip"的压缩包中,可能包含了关于9Patch工具的详细信息以及可能的源代码,让我们来深入了解一下这个重要的Android开发知识点。 9Patch是一种PNG图片文件,扩展名为.9...
在Android开发中,"Sprite"通常指的是动画精灵,它是一种在2D游戏中广泛使用的图形技术。Sprite用于创建连续的帧序列,以实现动画效果。在Android中,我们可以通过Bitmap和Canvas来实现Sprite的绘制,或者使用更高级...
Ninepatch 是 Android 图形系统中的一种特殊图片格式,允许开发者创建可伸缩的图形。这种格式的图片在某些边缘和角落标记了可拉伸的部分,其余部分则保持不变,从而在不同尺寸和比例的屏幕上都能保持良好的显示效果...
但在更早的Android版本中,开发者需要自定义视图或者利用`NinePatch`图片来模拟这种效果。 这个"CircleWaveDemo"项目可能包含以下关键知识点: 1. **自定义View**:为了在低版本Android系统中实现波纹效果,开发者...
在Android开发中,实现“长按水波纹扩散效果”是一种增强用户交互体验的设计手法,它使得用户在长时间按下屏幕时,触摸位置会出现类似水波纹的动态扩散效果。这种效果通常用于按钮、列表项或其他可点击的界面元素,...