[TIMOB-2452] Android: Image rotates around top-left not anchor point
| GitHub Issue | n/a |
|---|---|
| Type | Bug |
| Priority | High |
| Status | Closed |
| Resolution | Invalid |
| Resolution Date | 2012-03-19T16:34:38.000+0000 |
| Affected Version/s | n/a |
| Fix Version/s | n/a |
| Components | Android |
| Labels | anchor, android, look1, parity, point |
| Reporter | skypanther |
| Assignee | Hieu Pham |
| Created | 2011-04-15T03:20:13.000+0000 |
| Updated | 2017-03-16T22:27:29.000+0000 |
Description
I can get an image to rotate around its top-left corner. Supposedly, by setting an anchorPoint on the image I should be able to rotate around another point also. I cannot. It rotates around the top-left.
Info & code, see:
http://developer.appcelerator.com/helpdesk/view/57431">http://developer.appcelerator.com/helpdesk/view/57431
http://developer.appcelerator.com/question/84171/rotate-an-image-around-its-center">
http://developer.appcelerator.com/question/84171/rotate-an-image-ar...
Using SDK 1.5, timestamp=11/23/10 14:42, githash=df00caa with Android SDK 1.6.
Perhaps also related to https://appcelerator.lighthouseapp.com/projects/32238/tickets/839-implement-animations-in-android"> https://appcelerator.lighthouseapp.com/projects/32238/tickets/839-i...
Thanks,
Tim
Assigning to Don for triage.
Similar to this, the anchorPoint is not honored when animating a label. A full description with sample code is here: http://developer.appcelerator.com/question/117455/anchorpoint-not-working-on-android"> http://developer.appcelerator.com/question/117455/anchorpoint-not-w...
Issue
Anchor point - Titanium.UI.View.anchorPoint - it's currently supported in iOS only.Documentation
http://developer.appcelerator.com/apidoc/mobile/latest/Titanium.UI.View.anchorPoint-property.htmlRepro sequence
var win = Titanium.UI.createWindow(); // // REUSABLE ANIMATION WITH TRANSFORM // var t = Ti.UI.create2DMatrix(); t = t.rotate(90); var a = Titanium.UI.createAnimation(); a.transform = t; a.duration = 1000; a.autoreverse = true; // // TOP LEFT // var view1 = Titanium.UI.createView({ backgroundColor:'#336699', top:10, left:220, height:50, width:50, anchorPoint:{x:0,y:0} }); win.add(view1); var topLeft = Titanium.UI.createButton({ title:'Top Left', height:40, width:200, top:10, left:10 }); topLeft.addEventListener('click', function() { view1.animate(a); }); win.add(topLeft); // // TOP RIGHT // var view2 = Titanium.UI.createView({ backgroundColor:'#336699', top:80, left:220, height:50, width:50, anchorPoint:{x:1,y:0} }); win.add(view2); var topRight = Titanium.UI.createButton({ title:'Top Right', height:40, width:200, top:80, left:10 }); topRight.addEventListener('click', function() { view2.animate(a); }); win.add(topRight); // // BOTTOM LEFT // var view3 = Titanium.UI.createView({ backgroundColor:'#336699', top:150, left:220, height:50, width:50, anchorPoint:{x:0,y:1} }); win.add(view3); var bottomLeft = Titanium.UI.createButton({ title:'Bottom Left', height:40, width:200, top:150, left:10 }); bottomLeft.addEventListener('click', function() { view3.animate(a); }); win.add(bottomLeft); // // BOTTOM RIGHT // var view4 = Titanium.UI.createView({ backgroundColor:'#336699', top:220, left:220, height:50, width:50, anchorPoint:{x:1,y:1} }); win.add(view4); var bottomRight = Titanium.UI.createButton({ title:'Bottom Right', height:40, width:200, top:220, left:10 }); bottomRight.addEventListener('click', function() { view4.animate(a); }); win.add(bottomRight); // // CENTER // var view5 = Titanium.UI.createView({ backgroundColor:'#336699', top:290, left:220, height:50, width:50, anchorPoint:{x:0.5,y:0.5} }); win.add(view5); var center = Titanium.UI.createButton({ title:'Center', height:40, width:200, top:290, left:10 }); center.addEventListener('click', function() { view5.animate(a); }); win.add(center); win.open();Testing Steps: 1. Run this code for Android:
2.Simultaneously, run this code in iOS:var win = Titanium.UI.createWindow(); // // REUSABLE ANIMATION WITH TRANSFORM // var t = Ti.UI.create2DMatrix(); t = t.rotate(90); // // TOP LEFT // var view1 = Titanium.UI.createView({ backgroundColor:'#336699', top:10, left:220, height:50, width:50 }); win.add(view1); var topLeft = Titanium.UI.createButton({ title:'Top Left', height:40, width:200, top:10, left:10 }); topLeft.addEventListener('click', function() { view1.animate({ transform:t, duration: 1000, anchorPoint: {x:0, y:0} }); }); win.add(topLeft); // // TOP RIGHT // var view2 = Titanium.UI.createView({ backgroundColor:'#336699', top:80, left:220, height:50, width:50 }); win.add(view2); var topRight = Titanium.UI.createButton({ title:'Top Right', height:40, width:200, top:80, left:10 }); topRight.addEventListener('click', function() { view2.animate({ transform:t, duration: 1000, anchorPoint: {x:1, y:0} }); }); win.add(topRight); // // BOTTOM LEFT // var view3 = Titanium.UI.createView({ backgroundColor:'#336699', top:150, left:220, height:50, width:50 }); win.add(view3); var bottomLeft = Titanium.UI.createButton({ title:'Bottom Left', height:40, width:200, top:150, left:10 }); bottomLeft.addEventListener('click', function() { view3.animate({ transform:t, duration: 1000, anchorPoint: {x:0, y:1} }); }); win.add(bottomLeft); // // BOTTOM RIGHT // var view4 = Titanium.UI.createView({ backgroundColor:'#336699', top:220, left:220, height:50, width:50 }); win.add(view4); var bottomRight = Titanium.UI.createButton({ title:'Bottom Right', height:40, width:200, top:220, left:10 }); bottomRight.addEventListener('click', function() { view4.animate({ transform:t, duration: 1000, anchorPoint: {x:1, y:1} }); }); win.add(bottomRight); // // CENTER // var view5 = Titanium.UI.createView({ backgroundColor:'#336699', top:290, left:220, height:50, width:50 }); win.add(view5); var center = Titanium.UI.createButton({ title:'Center', height:40, width:200, top:290, left:10 }); center.addEventListener('click', function() { view5.animate({ transform:t, duration: 1000, anchorPoint: {x:0.5, y:0.5} }); }); win.add(center); win.open();3. Check behavior on both iOS/Android.var win = Titanium.UI.createWindow(); // // REUSABLE ANIMATION WITH TRANSFORM // var t = Ti.UI.create2DMatrix(); t = t.rotate(90); var a = Titanium.UI.createAnimation(); a.transform = t; a.duration = 1000; //a.autoreverse = true; // // TOP LEFT // var view1 = Titanium.UI.createView({ backgroundColor:'#336699', top:10, left:220, height:50, width:50, anchorPoint:{x:0,y:0} }); win.add(view1); var topLeft = Titanium.UI.createButton({ title:'Top Left', height:40, width:200, top:10, left:10 }); topLeft.addEventListener('click', function() { view1.animate(a); }); win.add(topLeft); // // TOP RIGHT // var view2 = Titanium.UI.createView({ backgroundColor:'#336699', top:80, left:220, height:50, width:50, anchorPoint:{x:1,y:0} }); win.add(view2); var topRight = Titanium.UI.createButton({ title:'Top Right', height:40, width:200, top:80, left:10 }); topRight.addEventListener('click', function() { view2.animate(a); }); win.add(topRight); // // BOTTOM LEFT // var view3 = Titanium.UI.createView({ backgroundColor:'#336699', top:150, left:220, height:50, width:50, anchorPoint:{x:0,y:1} }); win.add(view3); var bottomLeft = Titanium.UI.createButton({ title:'Bottom Left', height:40, width:200, top:150, left:10 }); bottomLeft.addEventListener('click', function() { view3.animate(a); }); win.add(bottomLeft); // // BOTTOM RIGHT // var view4 = Titanium.UI.createView({ backgroundColor:'#336699', top:220, left:220, height:50, width:50, anchorPoint:{x:1,y:1} }); win.add(view4); var bottomRight = Titanium.UI.createButton({ title:'Bottom Right', height:40, width:200, top:220, left:10 }); bottomRight.addEventListener('click', function() { view4.animate(a); }); win.add(bottomRight); // // CENTER // var view5 = Titanium.UI.createView({ backgroundColor:'#336699', top:290, left:220, height:50, width:50, anchorPoint:{x:0.5,y:0.5} }); win.add(view5); var center = Titanium.UI.createButton({ title:'Center', height:40, width:200, top:290, left:10 }); center.addEventListener('click', function() { view5.animate(a); }); win.add(center); win.open();Note that the PR sent for this bug ( https://github.com/appcelerator/titanium_mobile/pull/1746) fixes a conversion issue for a workaround of the underlying problem. This is b/c we don't plan to support anchorPoint property for view anytime soon. Marking this bug as invalid.
Note that this functionality is documented as iOS only and we don't intend to support it on Android.
Closing ticket as invalid.