mirror of
https://github.com/alibaba/Tangram-Android.git
synced 2026-10-17 05:07:05 +08:00
Add demo for 3.0 and worked.
This commit is contained in:
@@ -46,6 +46,8 @@
|
||||
|
||||
<activity android:name="com.tmall.wireless.tangram.example.TangramActivity">
|
||||
</activity>
|
||||
<activity android:name="com.tmall.wireless.tangram.example.tangram3.Tangram3Activity">
|
||||
</activity>
|
||||
<activity android:name="com.tmall.wireless.tangram.example.RxTangramActivity">
|
||||
</activity>
|
||||
<activity android:name="com.tmall.wireless.tangram.example.TangramDataParserActivity">
|
||||
|
||||
@@ -0,0 +1,740 @@
|
||||
[
|
||||
{
|
||||
"type": "container-scroll",
|
||||
"style": {
|
||||
"pageWidth": 200,
|
||||
"hGap": 10,
|
||||
"pageHeight": 100
|
||||
},
|
||||
"componentInfo": [
|
||||
{
|
||||
"name": "vvtest",
|
||||
"type": "VirtualView",
|
||||
"version": "1",
|
||||
"url": ""
|
||||
}
|
||||
],
|
||||
"items": [
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"title": "rs标题1",
|
||||
"type": "dxTest"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"title": "rs标题2",
|
||||
"type": "vvtest"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"title": "rs标题3",
|
||||
"type": "vvtest"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"title": "rs标题4",
|
||||
"type": "vvtest"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"items": [
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"msg": "暴走大事件第五季暴走大事件第五季暴走大事件第五季",
|
||||
"play": "23343454",
|
||||
"danmu": "13234",
|
||||
"test": "分区1",
|
||||
"type": "Debug"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"msg": "说说你在B站的故事",
|
||||
"play": "5445667",
|
||||
"danmu": "2134",
|
||||
"test": "分区2",
|
||||
"type": "Debug"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"msg": "切格瓦拉东京偷车切格瓦拉东京偷车切格瓦拉东京偷车",
|
||||
"play": "496",
|
||||
"danmu": "23",
|
||||
"test": "分区3",
|
||||
"type": "Debug"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"msg": "Five to Go 大学生短片",
|
||||
"play": "369",
|
||||
"danmu": "5",
|
||||
"test": "分区4",
|
||||
"type": "Debug"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "banner1",
|
||||
"type": "container-oneColumn",
|
||||
"style": {
|
||||
"aspectRatio": 3.223
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"msg": "标题1",
|
||||
"title": "说说你的故事",
|
||||
"type": "vvtest"
|
||||
},
|
||||
{
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"msg": "标题2",
|
||||
"title": "Five to Go 大学生短片",
|
||||
"type": "vvtest"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-banner",
|
||||
"style": {
|
||||
"pageWidth": 200,
|
||||
"pageHeight": 100,
|
||||
"indicatorMargin": "5",
|
||||
"infinite": "true",
|
||||
"indicatorImg2": "https://img.alicdn.com/tps/TB1XRNFNXXXXXXKXXXXXXXXXXXX-32-4.png",
|
||||
"indicatorImg1": "https://img.alicdn.com/tps/TB16i4qNXXXXXbBXFXXXXXXXXXX-32-4.png",
|
||||
"scrollMarginLeft": "10",
|
||||
"indicatorGap": "2",
|
||||
"indicatorHeight": "1.5",
|
||||
"itemRatio": "2.654",
|
||||
"scrollMarginRight": "10",
|
||||
"indicatorGravity": "center",
|
||||
"hGap": "20"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info1",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info2",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info3",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info4",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info5",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info6",
|
||||
"style": {
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"items": [
|
||||
{
|
||||
"id": "banner1",
|
||||
"type": "container-banner",
|
||||
"style": {
|
||||
"indicatorMargin": "5",
|
||||
"infinite": "true",
|
||||
"indicatorImg2": "https://img.alicdn.com/tps/TB1XRNFNXXXXXXKXXXXXXXXXXXX-32-4.png",
|
||||
"indicatorImg1": "https://img.alicdn.com/tps/TB16i4qNXXXXXbBXFXXXXXXXXXX-32-4.png",
|
||||
"scrollMarginLeft": "10",
|
||||
"indicatorGap": "2",
|
||||
"indicatorHeight": "1.5",
|
||||
"itemRatio": "2.654",
|
||||
"scrollMarginRight": "10",
|
||||
"indicatorGravity": "center",
|
||||
"hGap": "20",
|
||||
"height": 200
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info1",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info2",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info3",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info4",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info5",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info6",
|
||||
"style": {
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"items": [
|
||||
{
|
||||
"type": "container-scroll",
|
||||
"style": {
|
||||
"pageWidth": 200,
|
||||
"pageHeight": 100,
|
||||
"indicatorMargin": "5",
|
||||
"infinite": "true",
|
||||
"indicatorImg2": "https://img.alicdn.com/tps/TB1XRNFNXXXXXXKXXXXXXXXXXXX-32-4.png",
|
||||
"indicatorImg1": "https://img.alicdn.com/tps/TB16i4qNXXXXXbBXFXXXXXXXXXX-32-4.png",
|
||||
"scrollMarginLeft": "10",
|
||||
"indicatorGap": "2",
|
||||
"indicatorHeight": "1.5",
|
||||
"itemRatio": "2.654",
|
||||
"scrollMarginRight": "10",
|
||||
"indicatorGravity": "center",
|
||||
"hGap": "20"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info1",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info2",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info3",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info4",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info5",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info6",
|
||||
"style": {
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "BuyCate",
|
||||
"style": {
|
||||
"hGap": "15",
|
||||
"vGap": "15",
|
||||
"margin": [
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null
|
||||
],
|
||||
"padding": [
|
||||
"15",
|
||||
"15",
|
||||
"15",
|
||||
"15"
|
||||
]
|
||||
},
|
||||
"type": "container-waterfall",
|
||||
"items": [
|
||||
{
|
||||
"title": "A",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "B",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "C",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "D",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "E",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "F",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "G",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "H",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "I",
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"title": "G",
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"style": {
|
||||
"aspectRatio": 3.223
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "singleImgView",
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1pdJFQpXXXXbUXpXXXXXXXXXX-750-243.png"
|
||||
},
|
||||
{
|
||||
"type": "singleImgView",
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1pdJFQpXXXXbUXpXXXXXXXXXX-750-243.png"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-sticky",
|
||||
"style": {
|
||||
"sticky": "start"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "sticky",
|
||||
"style": {
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-banner",
|
||||
"id": "banner2",
|
||||
"style": {
|
||||
"indicatorImg1": "https://gw.alicdn.com/tps/TB16RaxLpXXXXbIXFXXXXXXXXXX-14-14.png",
|
||||
"indicatorImg2": "https://gw.alicdn.com/tps/TB1m79uLpXXXXXUXVXXXXXXXXXX-18-16.png",
|
||||
"indicatorGravity": "center",
|
||||
"indicatorPosition": "inside",
|
||||
"indicatorMargin": 10,
|
||||
"indicatorGap": 2,
|
||||
"scrollMarginLeft": 20,
|
||||
"scrollMarginRight": 20,
|
||||
"hGap": 12,
|
||||
"pageRatio": 0.5,
|
||||
"bgColor": "#ffffff"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info11",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info12",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info13",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info14",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info15",
|
||||
"style": {
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "info16",
|
||||
"style": {
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-onePlusN",
|
||||
"style": {
|
||||
"aspectRatio": "1.778",
|
||||
"cols": [
|
||||
43.467
|
||||
],
|
||||
"rows": [
|
||||
43.602
|
||||
]
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"action": "xxx",
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1pdJFQpXXXXbUXpXXXXXXXXXX-750-243.png",
|
||||
"style": {
|
||||
"margin": "[0,1,0,0]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"action": "xxx",
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1pdJFQpXXXXbUXpXXXXXXXXXX-750-243.png",
|
||||
"style": {
|
||||
"margin": "[0,0,1,0]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"action": "xxx",
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1pdJFQpXXXXbUXpXXXXXXXXXX-750-243.png",
|
||||
"style": {
|
||||
"margin": "[0,1,0,0]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"action": "xxx",
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1pdJFQpXXXXbUXpXXXXXXXXXX-750-243.png",
|
||||
"style": {
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-twoColumn",
|
||||
"style": {
|
||||
"hGap": 10,
|
||||
"vGap": 10,
|
||||
"cols": [
|
||||
35.5
|
||||
]
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-threeColumn",
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "block",
|
||||
"style": {
|
||||
"display": "block"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-fourColumn",
|
||||
"items": [
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-scrollFix",
|
||||
"id": "scrollFixShowOnEnter",
|
||||
"style": {
|
||||
"showType": "showONEnter"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"style": {
|
||||
"height": 120
|
||||
},
|
||||
"msg": "showOnEnter"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"id": "dividerShow",
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"msg": "I am a divider"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-onePlusN",
|
||||
"style": {
|
||||
"bgColor": "#e3e3e3",
|
||||
"cols": [
|
||||
"46.667"
|
||||
]
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-onePlusN",
|
||||
"style": {
|
||||
"cols": [
|
||||
40
|
||||
]
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"style": {
|
||||
"margin": [
|
||||
4,
|
||||
4,
|
||||
2,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"style": {
|
||||
"margin": [
|
||||
0,
|
||||
0,
|
||||
4,
|
||||
0
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-onePlusN",
|
||||
"style": {
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"items": [
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-fiveColumn",
|
||||
"load": "com.tmall.request.test",
|
||||
"header": {
|
||||
"imgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"arrowImgUrl": "https://gw.alicdn.com/tfs/TB1vqF.PpXXXXaRaXXXXXXXXXXX-110-72.png",
|
||||
"title": "标题1",
|
||||
"type": "vvtest",
|
||||
"renderService": "VirtualView"
|
||||
},
|
||||
"style": {
|
||||
"autoExpand": true
|
||||
},
|
||||
"items": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-fourColumn",
|
||||
"style": {
|
||||
"autoExpand": true,
|
||||
"enableColspan": true,
|
||||
"vGap": "2",
|
||||
"hGap": "2"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "testView",
|
||||
"style": {
|
||||
"colspan": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView",
|
||||
"style": {
|
||||
"colspan": 2
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
},
|
||||
{
|
||||
"type": "testView"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-float",
|
||||
"style": {
|
||||
"align": "bottom_left",
|
||||
"x": 10,
|
||||
"y": 100
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "2",
|
||||
"action": "xxx",
|
||||
"imgUrl": "https://img.alicdn.com/tps/TB11Y5hPVXXXXbaXpXXXXXXXXXX-186-158.png",
|
||||
"style": {
|
||||
"margin": [
|
||||
10,
|
||||
10,
|
||||
10,
|
||||
10
|
||||
],
|
||||
"height": 50,
|
||||
"width": 50
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "container-oneColumn",
|
||||
"load": "com.tmall.request.load.more",
|
||||
"loadType": 1,
|
||||
"items": [
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -39,6 +39,8 @@ import android.widget.ListAdapter;
|
||||
import android.widget.ListView;
|
||||
import android.widget.SimpleAdapter;
|
||||
|
||||
import com.tmall.wireless.tangram.example.tangram3.Tangram3Activity;
|
||||
|
||||
/**
|
||||
* Created by longerian on 2017/7/24.
|
||||
*
|
||||
@@ -57,6 +59,10 @@ public class DemoListActivity extends ListActivity {
|
||||
parse.put("name", "基本Tangram");
|
||||
parse.put("class", TangramActivity.class.getName());
|
||||
list.add(parse);
|
||||
HashMap<String, String> newTangram = new HashMap<String, String>();
|
||||
newTangram.put("name", "Tangram 3.0");
|
||||
newTangram.put("class", Tangram3Activity.class.getName());
|
||||
list.add(newTangram);
|
||||
HashMap<String, String> api = new HashMap<String, String>();
|
||||
api.put("name", "响应式Tangram");
|
||||
api.put("class", RxTangramActivity.class.getName());
|
||||
@@ -71,7 +77,7 @@ public class DemoListActivity extends ListActivity {
|
||||
|
||||
@Override
|
||||
protected void onListItemClick(ListView l, View v, int position, long id) {
|
||||
Map<String, String> item = (Map<String, String>)l.getItemAtPosition(position);
|
||||
Map<String, String> item = (Map<String, String>) l.getItemAtPosition(position);
|
||||
String className = item.get("class");
|
||||
if (className != null) {
|
||||
Intent intent = new Intent();
|
||||
|
||||
+182
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018 Alibaba Group
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package com.tmall.wireless.tangram.example.tangram3;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.AssetManager;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import com.libra.Utils;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.tmall.wireless.tangram.example.R;
|
||||
import com.tmall.wireless.tangram3.TangramBuilder;
|
||||
import com.tmall.wireless.tangram3.TangramEngine;
|
||||
import com.tmall.wireless.tangram.example.support.SampleScrollSupport;
|
||||
import com.tmall.wireless.tangram3.util.IInnerImageSetter;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* Created by villadora on 15/8/18.
|
||||
*/
|
||||
public class Tangram3Activity extends Activity {
|
||||
|
||||
private static final String TAG = Tangram3Activity.class.getSimpleName();
|
||||
|
||||
private Handler mMainHandler;
|
||||
TangramEngine engine;
|
||||
TangramBuilder.InnerBuilder builder;
|
||||
RecyclerView recyclerView;
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.main_activity);
|
||||
recyclerView = (RecyclerView) findViewById(R.id.main_view);
|
||||
|
||||
//Step 1: init tangram
|
||||
TangramBuilder.init(this.getApplicationContext(), new IInnerImageSetter() {
|
||||
@Override
|
||||
public <IMAGE extends ImageView> void doLoadImageUrl(@NonNull IMAGE view,
|
||||
@Nullable String url) {
|
||||
Picasso.with(Tangram3Activity.this.getApplicationContext()).load(url).into(view);
|
||||
}
|
||||
}, ImageView.class);
|
||||
|
||||
//Tangram.switchLog(true);
|
||||
mMainHandler = new Handler(getMainLooper());
|
||||
|
||||
//Step 2: register build=in cells and cards
|
||||
builder = TangramBuilder.newInnerBuilder(this);
|
||||
|
||||
//Step 3: register business cells and cards
|
||||
// recommend to use string type to register component
|
||||
builder.registerCell("testView", TestBlockView.class);
|
||||
builder.registerCell("Debug", TestBlockView.class);
|
||||
builder.registerCell("singleImgView", TestImageView.class);
|
||||
|
||||
builder.registerRenderService(new VirtualViewRenderService3());
|
||||
//Step 4: new engine
|
||||
engine = builder.build();
|
||||
|
||||
Utils.setUedScreenWidth(720);
|
||||
|
||||
// engine.addSimpleClickSupport(new SampleClickSupport());
|
||||
|
||||
//Step 6: enable auto load more if your page's data is lazy loaded
|
||||
engine.enableAutoLoadMore(true);
|
||||
// engine.register(InternalErrorSupport.class, new SampleErrorSupport());
|
||||
|
||||
//Step 7: bind recyclerView to engine
|
||||
engine.bindView(recyclerView);
|
||||
|
||||
//Step 8: listener recyclerView onScroll event to trigger auto load more
|
||||
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
engine.onScrolled();
|
||||
}
|
||||
});
|
||||
|
||||
//Step 9: set an offset to fix card
|
||||
engine.getLayoutManager().setFixOffset(0, 40, 0, 0);
|
||||
|
||||
//Step 10: get tangram data and pass it to engine
|
||||
String json = new String(getAssertsFile(this, "data3.0.json"));
|
||||
JSONArray data = null;
|
||||
try {
|
||||
data = new JSONArray(json);
|
||||
engine.setData(data);
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//Demo for component to listen container's event
|
||||
engine.register(SampleScrollSupport.class, new SampleScrollSupport(recyclerView));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
if (engine != null) {
|
||||
engine.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] getAssertsFile(Context context, String fileName) {
|
||||
InputStream inputStream = null;
|
||||
AssetManager assetManager = context.getAssets();
|
||||
try {
|
||||
inputStream = assetManager.open(fileName);
|
||||
if (inputStream == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
BufferedInputStream bis = null;
|
||||
int length;
|
||||
try {
|
||||
bis = new BufferedInputStream(inputStream);
|
||||
length = bis.available();
|
||||
byte[] data = new byte[length];
|
||||
bis.read(data);
|
||||
|
||||
return data;
|
||||
} catch (IOException e) {
|
||||
|
||||
} finally {
|
||||
if (bis != null) {
|
||||
try {
|
||||
bis.close();
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018 Alibaba Group
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package com.tmall.wireless.tangram.example.tangram3;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tmall.wireless.tangram.example.R;
|
||||
import com.tmall.wireless.tangram.example.support.SampleScrollSupport;
|
||||
import com.tmall.wireless.tangram3.structure.BaseCell;
|
||||
import com.tmall.wireless.tangram3.structure.view.ITangramViewLifeCycle;
|
||||
|
||||
/**
|
||||
* Created by villadora on 15/8/24.
|
||||
*/
|
||||
public class TestBlockView extends FrameLayout implements ITangramViewLifeCycle, SampleScrollSupport.IScrollListener {
|
||||
private TextView textView;
|
||||
private BaseCell cell;
|
||||
|
||||
public TestBlockView(Context context) {
|
||||
super(context);
|
||||
init();
|
||||
}
|
||||
|
||||
public TestBlockView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init();
|
||||
}
|
||||
|
||||
public TestBlockView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
inflate(getContext(), R.layout.item, this);
|
||||
textView = (TextView) findViewById(R.id.title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cellInited(BaseCell cell) {
|
||||
setOnClickListener(cell);
|
||||
this.cell = cell;
|
||||
if (cell.serviceManager != null) {
|
||||
SampleScrollSupport scrollSupport = cell.serviceManager.getService(SampleScrollSupport.class);
|
||||
scrollSupport.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postBindView(BaseCell cell) {
|
||||
int pos = cell.pos;
|
||||
String parent = "";
|
||||
if (cell.parent != null) {
|
||||
parent = cell.parent.getClass().getSimpleName();
|
||||
}
|
||||
textView.setText(
|
||||
cell.id + " pos: " + pos + " " + parent + " " + cell
|
||||
.optParam("msg"));
|
||||
|
||||
if (pos > 57) {
|
||||
textView.setBackgroundColor(0x66cccf00 + (pos - 50) * 128);
|
||||
} else if (pos % 2 == 0) {
|
||||
textView.setBackgroundColor(0xaaaaff55);
|
||||
} else {
|
||||
textView.setBackgroundColor(0xcceeeeee);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postUnBindView(BaseCell cell) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
||||
Log.i("TestView", "onScrollStateChanged: ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
|
||||
Log.i("TestView", "onScrolled: ");
|
||||
}
|
||||
}
|
||||
+180
@@ -0,0 +1,180 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2018 Alibaba Group
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package com.tmall.wireless.tangram.example.tangram3;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
import android.view.Gravity;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.Space;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.tmall.wireless.tangram3.dataparser.concrete.Style;
|
||||
import com.tmall.wireless.tangram3.structure.BaseCell;
|
||||
import com.tmall.wireless.tangram3.structure.view.ITangramViewLifeCycle;
|
||||
import com.tmall.wireless.tangram3.util.BDE;
|
||||
import com.tmall.wireless.tangram3.util.LifeCycleProviderImpl;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.functions.Consumer;
|
||||
import io.reactivex.functions.Function;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
||||
public class TestImageView extends LinearLayout implements ITangramViewLifeCycle {
|
||||
|
||||
public ImageView icon;
|
||||
|
||||
public TextView titleTextView;
|
||||
|
||||
private Context context;
|
||||
|
||||
private final int DEFAULT_ICON_SIZE = Style.dp2px(100);
|
||||
|
||||
public TestImageView(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public TestImageView(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, -1);
|
||||
}
|
||||
|
||||
public TestImageView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
this.context = context;
|
||||
initUI(context, DEFAULT_ICON_SIZE);
|
||||
}
|
||||
|
||||
private void initUI(Context context, int size){
|
||||
setOrientation(VERTICAL);
|
||||
setGravity(Gravity.CENTER_HORIZONTAL);
|
||||
setBackgroundColor(Color.WHITE);
|
||||
|
||||
icon = new ImageView(context);
|
||||
icon.setScaleType(ImageView.ScaleType.CENTER_CROP);
|
||||
|
||||
LayoutParams iconLp = new LayoutParams(size, size);
|
||||
iconLp.topMargin = Style.dp2px(8);
|
||||
addView(icon, iconLp);
|
||||
|
||||
titleTextView = new TextView(context);
|
||||
titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12);
|
||||
LayoutParams titleLp = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
|
||||
ViewGroup.LayoutParams.WRAP_CONTENT);
|
||||
titleLp.topMargin = Style.dp2px(4.0);
|
||||
addView(titleTextView, titleLp);
|
||||
|
||||
Space space = new Space(context);
|
||||
LayoutParams spaceLp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
|
||||
Style.dp2px(8));
|
||||
addView(space, spaceLp);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void cellInited(BaseCell cell) {
|
||||
setOnClickListener(cell);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postBindView(BaseCell cell) {
|
||||
if (cell.serviceManager != null && cell.serviceManager.supportRx()) {
|
||||
LifeCycleProviderImpl<BDE> lifeCycleProvider = cell.getLifeCycleProvider();
|
||||
Observable.just(cell).map(new Function<BaseCell, String>() {
|
||||
@Override
|
||||
public String apply(BaseCell cell) throws Exception {
|
||||
Thread.sleep(500L);
|
||||
int pos = cell.pos;
|
||||
return cell.id + " pos: " + pos + " " + cell.parent.getClass().getSimpleName() + " " + cell
|
||||
.optStringParam("title");
|
||||
}
|
||||
}).subscribeOn(Schedulers.computation())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.compose(lifeCycleProvider.<String>bindUntil(BDE.UNBIND))
|
||||
.subscribe(new Consumer<String>() {
|
||||
@Override
|
||||
public void accept(String s) throws Exception {
|
||||
titleTextView.setText(s);
|
||||
}
|
||||
});
|
||||
|
||||
Observable.just(cell).map(new Function<BaseCell, Integer>() {
|
||||
@Override
|
||||
public Integer apply(BaseCell cell) throws Exception {
|
||||
Thread.sleep(500L);
|
||||
int pos = cell.pos;
|
||||
if (pos > 57) {
|
||||
return 0x66cccf00 + (pos - 50) * 128;
|
||||
} else if (pos % 2 == 0) {
|
||||
return 0xaaaaff55;
|
||||
} else {
|
||||
return 0xcceeeeee;
|
||||
}
|
||||
}
|
||||
}).subscribeOn(Schedulers.computation())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.compose(lifeCycleProvider.<Integer>bindUntil(BDE.UNBIND))
|
||||
.subscribe(new Consumer<Integer>() {
|
||||
@Override
|
||||
public void accept(Integer s) throws Exception {
|
||||
icon.setBackgroundColor(s);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
int pos = cell.pos;
|
||||
titleTextView.setText(cell.id + " pos: " + pos + " " + cell.parent.getClass().getSimpleName() + " " + cell
|
||||
.optStringParam("title"));
|
||||
if (pos > 57) {
|
||||
icon.setBackgroundColor(0x66cccf00 + (pos - 50) * 128);
|
||||
} else if (pos % 2 == 0) {
|
||||
icon.setBackgroundColor(0xaaaaff55);
|
||||
} else {
|
||||
icon.setBackgroundColor(0xcceeeeee);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void postUnBindView(BaseCell cell) {
|
||||
|
||||
}
|
||||
|
||||
public static int parseColor(String colorStr, String defaultColor) {
|
||||
try {
|
||||
return Color.parseColor(colorStr);
|
||||
} catch (Exception e) {
|
||||
return Color.parseColor(defaultColor);
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isEmpty(String string){
|
||||
return string == null || string.isEmpty() || "null".equalsIgnoreCase(string);
|
||||
}
|
||||
|
||||
}
|
||||
+159
@@ -0,0 +1,159 @@
|
||||
package com.tmall.wireless.tangram.example.tangram3;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.squareup.picasso.Picasso;
|
||||
import com.squareup.picasso.RequestCreator;
|
||||
import com.squareup.picasso.Target;
|
||||
import com.tmall.wireless.tangram3.TangramEngine;
|
||||
import com.tmall.wireless.tangram3.core.protocol.ElementRenderService;
|
||||
import com.tmall.wireless.tangram3.dataparser.concrete.ComponentInfo;
|
||||
import com.tmall.wireless.tangram.example.data.DEBUG;
|
||||
import com.tmall.wireless.tangram.example.data.VVTEST;
|
||||
import com.tmall.wireless.vaf.framework.VafContext;
|
||||
import com.tmall.wireless.vaf.virtualview.Helper.ImageLoader;
|
||||
import com.tmall.wireless.vaf.virtualview.core.IContainer;
|
||||
import com.tmall.wireless.vaf.virtualview.core.ViewBase;
|
||||
import com.tmall.wireless.vaf.virtualview.event.EventData;
|
||||
import com.tmall.wireless.vaf.virtualview.event.EventManager;
|
||||
import com.tmall.wireless.vaf.virtualview.view.image.ImageBase;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class VirtualViewRenderService3 extends ElementRenderService {
|
||||
private VafContext vafContext;
|
||||
|
||||
private TangramEngine tangramEngine;
|
||||
|
||||
private static class ImageTarget implements Target {
|
||||
|
||||
ImageBase mImageBase;
|
||||
|
||||
ImageLoader.Listener mListener;
|
||||
|
||||
public ImageTarget(ImageBase imageBase) {
|
||||
mImageBase = imageBase;
|
||||
}
|
||||
|
||||
public ImageTarget(ImageLoader.Listener listener) {
|
||||
mListener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
|
||||
mImageBase.setBitmap(bitmap, true);
|
||||
if (mListener != null) {
|
||||
mListener.onImageLoadSuccess(bitmap);
|
||||
}
|
||||
Log.d("TangramActivity", "onBitmapLoaded " + from);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBitmapFailed(Drawable errorDrawable) {
|
||||
if (mListener != null) {
|
||||
mListener.onImageLoadFailed();
|
||||
}
|
||||
Log.d("TangramActivity", "onBitmapFailed ");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepareLoad(Drawable placeHolderDrawable) {
|
||||
Log.d("TangramActivity", "onPrepareLoad ");
|
||||
}
|
||||
}
|
||||
|
||||
private ImageLoader.IImageLoaderAdapter imageLoaderAdapter = new ImageLoader.IImageLoaderAdapter() {
|
||||
|
||||
private List<ImageTarget> cache = new ArrayList<ImageTarget>();
|
||||
|
||||
@Override
|
||||
public void bindImage(String uri, final ImageBase imageBase, int reqWidth, int reqHeight) {
|
||||
RequestCreator requestCreator = Picasso.with(tangramEngine.getContext()).load(uri);
|
||||
Log.d("TangramActivity", "bindImage request width height " + reqHeight + " " + reqWidth);
|
||||
if (reqHeight > 0 || reqWidth > 0) {
|
||||
requestCreator.resize(reqWidth, reqHeight);
|
||||
}
|
||||
ImageTarget imageTarget = new ImageTarget(imageBase);
|
||||
cache.add(imageTarget);
|
||||
requestCreator.into(imageTarget);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getBitmap(String uri, int reqWidth, int reqHeight, final ImageLoader.Listener lis) {
|
||||
RequestCreator requestCreator = Picasso.with(tangramEngine.getContext()).load(uri);
|
||||
Log.d("TangramActivity", "getBitmap request width height " + reqHeight + " " + reqWidth);
|
||||
if (reqHeight > 0 || reqWidth > 0) {
|
||||
requestCreator.resize(reqWidth, reqHeight);
|
||||
}
|
||||
ImageTarget imageTarget = new ImageTarget(lis);
|
||||
cache.add(imageTarget);
|
||||
requestCreator.into(imageTarget);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void init(TangramEngine tangramEngine) {
|
||||
this.tangramEngine = tangramEngine;
|
||||
vafContext = new VafContext(tangramEngine.getContext());
|
||||
tangramEngine.register(VafContext.class, vafContext);
|
||||
vafContext.getViewManager().init(tangramEngine.getContext());
|
||||
vafContext.setImageLoaderAdapter(imageLoaderAdapter);
|
||||
vafContext.getViewManager().loadBinBufferSync(VVTEST.BIN);
|
||||
vafContext.getViewManager().loadBinBufferSync(DEBUG.BIN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public View createView(Context context, ViewGroup parent, ComponentInfo info) {
|
||||
return vafContext.getContainerService().getContainer(info.getName(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mountView(JSONObject json, View view) {
|
||||
ViewBase vb = ((IContainer) view).getVirtualView();
|
||||
vb.setVData(json);
|
||||
if (vb.supportExposure()) {
|
||||
vafContext.getEventManager().emitEvent(
|
||||
EventManager.TYPE_Exposure, EventData.obtainData(vafContext, vb));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unmountView(JSONObject json, View view) {
|
||||
if (view instanceof IContainer) {
|
||||
ViewBase vb = ((IContainer) view).getVirtualView();
|
||||
vb.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
if (vafContext != null) {
|
||||
vafContext.onDestroy();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ComponentInfo onParseComponentInfo(ComponentInfo info) {
|
||||
return info;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSDKBizName() {
|
||||
return "VirtualView";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDownloadComponentInfo(List<ComponentInfo> componentInfoList) {
|
||||
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -46,7 +46,7 @@ org.gradle.jvmargs=-Xmx1536M
|
||||
GROUP=com.alibaba.android
|
||||
ARTIFACT=tangram
|
||||
VERSION=1
|
||||
VERSION_NAME=3.2.0.3
|
||||
VERSION_NAME=3.2.0.4
|
||||
PACKAGING_TYPE=aar
|
||||
systemProp.compileSdkVersion=26
|
||||
systemProp.targetSdkVersion=26
|
||||
|
||||
@@ -418,16 +418,6 @@ public class TangramBuilder {
|
||||
mDefaultResolverRegistry.registerCard(type, cardClz);
|
||||
}
|
||||
|
||||
/**
|
||||
* Now do noting, just exist for compatibility.
|
||||
* register item render by virtual view
|
||||
*
|
||||
* @param type
|
||||
*/
|
||||
@Deprecated
|
||||
public <V extends View> void registerVirtualView(String type) {
|
||||
}
|
||||
|
||||
/**
|
||||
* set a custom {@link IAdapterBuilder} to build adapter, the default is {@link PojoAdapterBuilder} which
|
||||
* would create a {@link PojoGroupBasicAdapter}
|
||||
|
||||
+7
@@ -491,6 +491,7 @@ public class PojoDataParser extends DataParser<JSONObject, JSONArray> {
|
||||
|
||||
fixStyle.x = Style.parseSize(styleJson.optString(KEY_X), 0);
|
||||
fixStyle.y = Style.parseSize(styleJson.optString(KEY_Y), 0);
|
||||
card.style = fixStyle;
|
||||
} else if (card instanceof LinearScrollCard) {
|
||||
LinearScrollCard linearScrollCard = (LinearScrollCard) card;
|
||||
JSONObject obj = new JSONObject();
|
||||
@@ -715,6 +716,12 @@ public class PojoDataParser extends DataParser<JSONObject, JSONArray> {
|
||||
}
|
||||
|
||||
parseCell(cell, cellData);
|
||||
if (parent != null) {
|
||||
boolean ret = parent.addCellInternal(cell, false);
|
||||
if (!ret && TangramBuilder.isPrintLog()) {
|
||||
LogUtils.w(TAG, "Parse invalid cell with data: " + cellData.toString());
|
||||
}
|
||||
}
|
||||
return cell;
|
||||
} else {
|
||||
BaseCellBinderResolver componentBinderResolver = serviceManager.getService(BaseCellBinderResolver.class);
|
||||
|
||||
+5
-2
@@ -120,10 +120,13 @@ public class LinearScrollCell extends BaseCell {
|
||||
@Override
|
||||
public void onAdded() {
|
||||
super.onAdded();
|
||||
adapter = new Adapter(getAdapter());
|
||||
}
|
||||
|
||||
public void setCells(List<BaseCell> cells) {
|
||||
if (adapter == null) {
|
||||
adapter = new Adapter(getAdapter());
|
||||
}
|
||||
|
||||
this.cells.clear();
|
||||
if (cells != null && cells.size() > 0) {
|
||||
this.cells.addAll(cells);
|
||||
@@ -151,7 +154,7 @@ public class LinearScrollCell extends BaseCell {
|
||||
return rawPosition;
|
||||
}
|
||||
|
||||
int columnCount = (int)(cellCount * 1.0f / maxRows + 0.5f);
|
||||
int columnCount = (int) (cellCount * 1.0f / maxRows + 0.5f);
|
||||
int rowIndex = rawPosition / maxRows;
|
||||
int columnIndex = rawPosition % maxRows;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user