Skip to content

Instantly share code, notes, and snippets.

@LieutenantChips
Last active May 25, 2018 02:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LieutenantChips/64f0ced5ec36a8d4424ac19f3249c23b to your computer and use it in GitHub Desktop.
Save LieutenantChips/64f0ced5ec36a8d4424ac19f3249c23b to your computer and use it in GitHub Desktop.
final ArrayList<View> allViews = getAllChildren(findViewById(R.id.mainLayout));
if(!allViews.contains(findViewById(R.id.mainLayout)))allViews.add(findViewById(R.id.mainLayout));
findViewById(R.id.mainLayout).getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// Layout has happened here.
ArrayList<View> nl = new ArrayList<>();
ArrayList<String> sl = new ArrayList<>();
for(int j = 0; j < allViews.size(); j++) {
try {
View v = findViewById(allViews.get(j).getId());
if(v == null) continue;
if(nl.contains(v)) continue;
ArrayList<View> allTouchables = v.getTouchables();
for (int i = 0; i < allTouchables.size(); i++) {
View touchable = allTouchables.get(i);
//if(touchable.getX() == 0.0 && touchable.getY() == 0.0) continue;
int loc[] = new int[2];
touchable.getLocationOnScreen(loc);
loc[0] += Math.abs(touchable.getLeft() - touchable.getRight())/2;
loc[1] += Math.abs(touchable.getTop() - touchable.getBottom())/2;
if(!sl.contains("ID:"
+ getResources().getResourceName(touchable.getId())
+ ":IDend" + "Xval:" + loc[0] + ":Xend"
+ "|Yval:" + loc[1] + ":Yend")) {
sl.add("ID:"
+ getResources().getResourceName(touchable.getId())
+ ":IDend" + "Xval:" + loc[0] + ":Xend"
+ "|Yval:" + loc[1] + ":Yend");
}
}
nl.add(v);
} catch (Exception e) {
}
}
for(int i = 0; i < sl.size(); i++){
Log.d("monkeyrunner_locations", "monkeyrunner_locations:"+sl.get(i));
}
// Don't forget to remove your listener when you are done with it.
findViewById(R.id.mainLayout).getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
/* .... */
//TODO This part of the code was found on stackoverflow : https://stackoverflow.com/questions/8395168/android-get-children-inside-a-view
private ArrayList<View> getAllChildren(View v) {
if (!(v instanceof ViewGroup)) {
ArrayList<View> viewArrayList = new ArrayList<View>();
viewArrayList.add(v);
return viewArrayList;
}
ArrayList<View> result = new ArrayList<View>();
ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
View child = vg.getChildAt(i);
ArrayList<View> viewArrayList = new ArrayList<View>();
viewArrayList.add(v);
viewArrayList.addAll(getAllChildren(child));
result.addAll(viewArrayList);
}
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment