{ "id": "120464", "key": "TIMOB-15345", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "15707", "description": "2013 Sprint 23", "name": "2013 Sprint 23", "archived": true, "released": true, "releaseDate": "2013-11-15" }, { "id": "15708", "description": "2013 Sprint 23 API", "name": "2013 Sprint 23 API", "archived": true, "released": true, "releaseDate": "2013-11-15" }, { "id": "14982", "description": "Release 3.2.0", "name": "Release 3.2.0", "archived": false, "released": true, "releaseDate": "2013-12-19" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2013-11-05T00:46:12.000+0000", "created": "2013-09-25T22:16:02.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "module_scrollableview", "qe-manualtest", "regression" ], "versions": [ { "id": "14982", "description": "Release 3.2.0", "name": "Release 3.2.0", "archived": false, "released": true, "releaseDate": "2013-12-19" } ], "issuelinks": [ { "id": "32147", "type": { "id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks" }, "outwardIssue": { "id": "118023", "key": "TIMOB-14767", "fields": { "summary": "ScrollableView Android - Erratic Behavior when using a 2D matrix transform", "status": { "description": "This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.", "name": "Reopened", "id": "4", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "32149", "type": { "id": "10122", "name": "Gantt: start-finish", "inward": "is triggered by", "outward": "is triggering" }, "inwardIssue": { "id": "105163", "key": "TIMOB-11811", "fields": { "summary": "Android: Bring animation to parity with iOS capabilities", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "priority": { "name": "Critical", "id": "1" }, "issuetype": { "id": "6", "description": "gh.issue.epic.desc", "name": "Epic", "subtask": false } } } } ], "assignee": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2014-08-12T01:32:00.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10202", "name": "Android", "description": "Android Platform" } ], "description": "Test case:\r\n{code}\r\nfunction generateColumn() {\r\n\tvar numbers = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];\r\n\tvar labels = [];\r\n \r\n\tnumbers.forEach(function(_number) {\r\n\t\tlabels.push(\r\n\t\tTi.UI.createLabel({\r\n\t\t\ttext: _number,\r\n\t\t\ttransform: Ti.UI.create2DMatrix({\r\n\t\t\t\trotate: 90\r\n\t\t\t})\r\n\t\t}));\r\n\t});\r\n \r\n\treturn labels;\r\n}\r\n\r\n\r\nvar win = Ti.UI.createWindow({\r\n\tfullscreen: false,\r\n\tbackgroundColor: 'black'\r\n});\r\n\r\nvar wrapper = Ti.UI.createView({\r\n\tlayout: \"horizontal\",\r\n\tbackgroundColor: 'white',\r\n\theight: 100\r\n});\r\n\r\nvar col1 = Ti.UI.createScrollableView({\r\n\tleft: 50,\r\n\twidth: 100,\r\n \tviews: generateColumn(),\r\n \ttransform: Ti.UI.create2DMatrix({\r\n\t\t\trotate: -90\r\n\t\t})\r\n});\r\n\r\nvar col2 = Ti.UI.createScrollableView({\r\n\twidth: 100,\r\n \tviews: generateColumn(),\r\n \ttransform: Ti.UI.create2DMatrix({\r\n\t\t\trotate: -90\r\n\t\t})\r\n});\r\n\r\nvar col3 = Ti.UI.createScrollableView({\r\n\twidth: 100,\r\n \tviews: generateColumn(),\r\n \ttransform: Ti.UI.create2DMatrix({\r\n\t\t\trotate: -90\r\n\t\t})\r\n});\r\n\r\nwrapper.add(col1);\r\nwrapper.add(col2);\r\nwrapper.add(col3);\r\n\r\nwin.add(wrapper);\r\nwin.open();\r\n{code}\r\nRun the above code. \r\nExpected behavior: Should see 3 scrollable views in the white view.\r\nActual behavior: nothing shows in the white view.\r\nThis issue is in the master (3.2.0) only. 3.1.3.GA works fine.", "attachment": [], "flagged": false, "summary": "Android: ScrollableView does not show after using a 2D matrix transform", "creator": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "environment": null, "comment": { "comments": [ { "id": "272906", "author": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "body": "This regression is caused by https://github.com/appcelerator/titanium_mobile/pull/4398", "updateAuthor": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-09-25T23:32:28.000+0000", "updated": "2013-09-25T23:32:28.000+0000" }, { "id": "274106", "author": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Here is another test case:\n{code}\nvar label = Ti.UI.createLabel({\n\ttop: 200,\n\tleft: 200,\n\tbackgroundColor: \"blue\",\n\ttext : \"This is text\",\n\tfont : {\n\t\tfontSize : 40\n\t},\n\ttransform : Ti.UI.create2DMatrix({\n\t\trotate : 90\n\t})\n});\n\nvar view = Ti.UI.createView({\n\ttop: 0,\n\tleft: 0,\n\theight: 200,\n\twidth: 200,\n\tbackgroundColor: \"yellow\"\n});\n\nvar win = Ti.UI.createWindow({\n fullscreen: false,\n backgroundColor: 'black'\n});\n \nvar wrapper = Ti.UI.createView({\n backgroundColor: 'white',\n});\n\nwrapper.add(view);\nwrapper.add(label);\nwin.add(wrapper);\nwin.open();\n{code}\nRan the above code with 3.1.3.GA and the master. Found out that the anchor point to rotate around is the view center in 3.1.3.GA and is the top left corner of the view in the master. ", "updateAuthor": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-10-08T00:06:27.000+0000", "updated": "2013-10-08T00:06:27.000+0000" }, { "id": "274624", "author": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "body": "In [PR#4398|https://github.com/appcelerator/titanium_mobile/pull/4398], we started to use a new animation system called [Property Animation|http://android-developers.blogspot.com/2011/02/animation-in-honeycomb.html]. Although the property animation is introduced in Honeycomb, we can still apply it to pre-Honeycomb because we use the NineOldAndroids compatibility library.\r\n\r\nOne difference between the old and new animation system is how to specify the location of the anchor point, around which the rotation transform occurs. In the old system, we can use either a relative value, eg. \"%50\" means the center of the view, or an absolute value, eg. \"50px\" means 50 pixels away from the top left corner of the view. In the new system, we can only use an absolute value.\r\n\r\nThe regression in this ticket happens because when the \"transform\" property is defined during the creation of the view, the anchor point is calculated before the layout pass. And before the layout pass, we don't know the view size yet. Therefore, it uses (0, 0) which is the top left corner of the view. \r\n\r\nI tried to set anchor point after the layout pass. But on Jelly Bean devices, it has a visual effect that we can see the view rotates on the screen after the window opens. That may be because the difference in the timing for the drawing cycle.", "updateAuthor": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-10-10T17:28:24.000+0000", "updated": "2013-10-31T17:45:06.000+0000" }, { "id": "277777", "author": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PR: https://github.com/appcelerator/titanium_mobile/pull/4899\r\nFor FR, please run the above two test cases on different devices with different API levels.", "updateAuthor": { "name": "pwang", "key": "pwang", "displayName": "Ping Wang", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2013-11-01T23:08:43.000+0000", "updated": "2013-11-01T23:10:48.000+0000" }, { "id": "279321", "author": { "name": "pmishra", "key": "pmishra", "displayName": "Paras Mishra", "active": true, "timeZone": "Asia/Kolkata" }, "body": "Scrollable View is displayed, hence closing the issue.\r\n\r\nVerified fixed on:\r\nDevice : Google Nexus 3, Android Version: 4.0.4,\r\nDevice : Google Nexus 7, Android Version: 4.1, Google Nexus 7, Android Version: 4.3\r\nSDK: 3.2.0.v20131112180422\r\nCLI version : 3.2.0\r\nOS : MAC OSX 10.9\r\nAlloy : 1.2.2\r\nAppcelerator Studio, build: 3.2.0.201311122338\r\nXCode : 5.0.2", "updateAuthor": { "name": "pmishra", "key": "pmishra", "displayName": "Paras Mishra", "active": true, "timeZone": "Asia/Kolkata" }, "created": "2013-11-13T11:52:29.000+0000", "updated": "2013-11-13T11:52:29.000+0000" } ], "maxResults": 5, "total": 5, "startAt": 0 } } }