日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

自定义Background

發(fā)布時(shí)間:2025/7/25 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义Background 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

TWaver提供了ImageBackground來(lái)為TNetwork設(shè)置背景,ImageBackground可以設(shè)置為顏色,漸變色,圖片或紋理,但是如果想設(shè)置多張圖片為背景,或者需要準(zhǔn)確的定位背景(比如居中),ImageBackground就無(wú)能為力了,下面看我的解決方案:

既然ImageBackground無(wú)法滿足需求了,我們就自己寫一個(gè),得益于TWaver優(yōu)秀的設(shè)計(jì),我們可以很容易地?cái)U(kuò)展原有的類,然后加上自己的功能。通過(guò)查看API得知,ImageBackground繼承自AbstractBackground,我們干脆拋棄ImageBackground,自己從AbstractBackground繼承。考慮到有可能需要多張圖片組合成一個(gè)背景,我們引入Layer的概念,在我們自定義的Background維護(hù)一個(gè)集合,存儲(chǔ)Layer的信息,繪制背景的時(shí)候從集合中取出Layer統(tǒng)一渲染。自定義Background類的結(jié)構(gòu)應(yīng)該是下面這樣的:?

public class GeneralBackGround extends AbstractBackground{private java.util.List backGroundModel=new ArrayList();@Overridepublic void paintContent(Graphics2D g2d, double zoom, Rectangle viewportRect) {Iterator it=backGroundModel.iterator();while(it.hasNext()){GeneralBackGroundLayer gbgd= (GeneralBackGroundLayer) it.next();//利用g2d進(jìn)行繪制,具體代碼請(qǐng)看附件}}/*** 添加Layer* @param layer*/public void addLayer(GeneralBackGroundLayer layer){this.backGroundModel.add(layer);}@Overridepublic Dimension getBackgroundSize() {return null;}@Overridepublic SVGStruct toSVG(SVGContext svgContext) {return new SVGStruct("", null);}public List getBackGroundModel() {return backGroundModel;}public void setBackGroundModel(List backGroundModel) {this.backGroundModel = backGroundModel;} }

?Layer更簡(jiǎn)單,因?yàn)殇秩竟ぷ魇荊eneralBackGround來(lái)做,所以Layer只需要存儲(chǔ)一些背景屬性,比如:位置,類型(顏色,漸變,圖片,紋理),透明度等,我定義的Layer結(jié)構(gòu)如下:

?

public class GeneralBackGroundLayer {private int direction=DIRECTION_TOP_LEFT;//位置,默認(rèn)左上角private int type;//類型,顏色,漸變,圖片或紋理private boolean full=false;//是否填充整個(gè)背景private Dimension size;//指定大小private Color color;//背景色private Color gradientColor;//漸變背景色private int gradientFactory;//漸變樣式,屬性為TWaverConst.GRADIENT_XXXprivate int offsetX=0;//X偏移private int offsetY=0;//Y偏移private SerializableTexturePaint texturePaint;//紋理背景private SerializableImage image;//背景圖片private String name;//層的名字//不會(huì)序列化的圖片和紋理背景private Image unserializableImage;private TexturePaint unserializableTexturePaint;private float alpha=1f;//透明度//getter,setter }

如果你覺得這些屬性不夠用,完全可以加入自定義屬性(比如旋轉(zhuǎn)角度),然后在GeneralBackGround#paintContent中處理一下就可以了。

接下來(lái)要考慮XML存儲(chǔ)的問(wèn)題,TWaver使用java.beans.XMLEncoder將java bean轉(zhuǎn)換成XML,具體的用法可以查看API。需要指出的是,BufferedImage和TexturePaint無(wú)法直接轉(zhuǎn)換,因?yàn)樗鼈儧](méi)有公共的無(wú)參構(gòu)造,為了將它們存儲(chǔ)進(jìn)XML,我們需要做一點(diǎn)額外的處理:BufferedImage轉(zhuǎn)換成Base64的一個(gè)字符串存儲(chǔ),TexturePaint可以拆成一個(gè)BufferedImage和一個(gè)Rectangle存儲(chǔ),我的實(shí)現(xiàn)類分別是:SerializableImage和SerializableTexturePaint,源碼在附件中,大家可以參考。

最后附上一張Demo截圖

注意,除了兩個(gè)Node和一個(gè)Link,其它的都是Background哦!附件下載請(qǐng)見原文最下方

轉(zhuǎn)載于:https://www.cnblogs.com/twaver/archive/2012/08/17/2643947.html

總結(jié)

以上是生活随笔為你收集整理的自定义Background的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。