Merge "Removing unnecessary object creation and double loop during getDescendantCoordRelativeToAncestor" into ub-launcher3-calgary

This commit is contained in:
Sunny Goyal
2016-06-23 21:29:20 +00:00
committed by Android (Google) Code Review
+15 -23
View File
@@ -342,35 +342,27 @@ public final class Utilities {
*/
public static float getDescendantCoordRelativeToAncestor(
View descendant, View ancestor, int[] coord, boolean includeRootScroll) {
ArrayList<View> ancestorChain = new ArrayList<View>();
float[] pt = {coord[0], coord[1]};
float scale = 1.0f;
View v = descendant;
while(v != ancestor && v != null) {
ancestorChain.add(v);
// For TextViews, scroll has a meaning which relates to the text position
// which is very strange... ignore the scroll.
if (v != descendant || includeRootScroll) {
pt[0] -= v.getScrollX();
pt[1] -= v.getScrollY();
}
v.getMatrix().mapPoints(pt);
pt[0] += v.getLeft();
pt[1] += v.getTop();
scale *= v.getScaleX();
v = (View) v.getParent();
}
float scale = 1.0f;
int count = ancestorChain.size();
for (int i = 0; i < count; i++) {
View v0 = ancestorChain.get(i);
// For TextViews, scroll has a meaning which relates to the text position
// which is very strange... ignore the scroll.
if (v0 != descendant || includeRootScroll) {
pt[0] -= v0.getScrollX();
pt[1] -= v0.getScrollY();
}
v0.getMatrix().mapPoints(pt);
pt[0] += v0.getLeft();
pt[1] += v0.getTop();
scale *= v0.getScaleX();
}
coord[0] = (int) Math.round(pt[0]);
coord[1] = (int) Math.round(pt[1]);
coord[0] = Math.round(pt[0]);
coord[1] = Math.round(pt[1]);
return scale;
}