欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

自定義Background

系統(tǒng) 2190 0

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

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

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

Layer更簡單,因為渲染工作是GeneralBackGround來做,所以Layer只需要存儲一些背景屬性,比如:位置,類型(顏色,漸變,圖片,紋理),透明度等,我定義的Layer結構如下:

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

    //getter,setter
}
  

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

接下來要考慮XML存儲的問題,TWaver使用java.beans.XMLEncoder將java bean轉換成XML,具體的用法可以查看API。需要指出的是,BufferedImage和TexturePaint無法直接轉換,因為它們沒有公共的無參構造,為了將它們存儲進XML,我們需要做一點額外的處理:BufferedImage轉換成Base64的一個字符串存儲,TexturePaint可以拆成一個BufferedImage和一個Rectangle存儲,我的實現(xiàn)類分別是:SerializableImage和SerializableTexturePaint,源碼在附件中,大家可以參考。

最后附上一張Demo截圖

自定義Background

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

自定義Background


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产亚洲精品一区二区 | 国产精品国产三级国产专区5o | 一区二区免费播放 | 成人小视频在线观看免费 | 538亚洲欧美国产日韩在线精品 | 奇米影视第四色在线 | 日韩2区| 午夜国产精品无套 | 在线a人片免费观看国产 | 欧美成人a级在线视频 | 美女国产精品 | 日本hdxxxxx护士免费的 | 成人欧美一区二区三区 | 亚洲涩综合 | 久草观看 | 久草视频福利在线观看 | 日本久久中文字幕 | 777色狠狠一区二区三区香蕉 | 国产亚洲福利精品一区 | 日本高清免费不卡在线 | 欧美日韩在线观看精品 | 亚洲精品久久久久久无码AV | 国产精品成人自拍 | 欧美一区二区三区爽大粗免费 | 欧美双插 | 午夜影院福利社 | 欧美午夜视频一区二区三区 | 国产精品久久久久久久久久红粉 | 一区二区三区四区五区中文字幕 | 日韩欧美国产视频 | 九九热精| 澳门一级毛片免费播放 | 国产精品视频网 | 丁香久久| 国产成人精品免费久久久久 | 女人裸体让男人桶全过程 | 日韩视频专区 | 亚洲成人三区 | 99视频在线观看视频一区 | 丁香六月激情婷婷 | 国产xxxx搡xxxxx搡麻豆 |