Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 根據坐標獲取控件方法

Android 根據坐標獲取控件方法

編輯:關於Android編程

/**
	 * 根據坐標獲取相對應的子控件
* 在Activity使用 * * @param x坐標 * @param y坐標 * @return 目標View */ public View getViewAtActivity(int x, int y) { // 從Activity裡獲取容器 View root = getWindow().getDecorView(); return findViewByXY(root, x, y); } /** * 根據坐標獲取相對應的子控件
* 在重寫ViewGroup使用 * * @param x坐標 * @param y坐標 * @return 目標View */ public View getViewAtViewGroup(int x, int y) { return findViewByXY(this, x, y); } private View findViewByXY(View view, int x, int y) { View targetView = null; if (view instanceof ViewGroup) { // 父容器,遍歷子控件 ViewGroup v = (ViewGroup) view; for (int i = 0; i < v.getChildCount(); i++) { targetView = findViewByXY(v.getChildAt(i), x, y); if (targetView != null) { break; } } } else { targetView = getTouchTarget(view, x, y); } return targetView; } private View getTouchTarget(View view, int x, int y) { View targetView = null; // 判斷view是否可以聚焦 ArrayList TouchableViews = view.getTouchables(); for (View child : TouchableViews) { if (isTouchPointInView(child, x, y)) { targetView = child; break; } } return targetView; } private boolean isTouchPointInView(View view, int x, int y) { int[] location = new int[2]; view.getLocationOnScreen(location); int left = location[0]; int top = location[1]; int right = left + view.getMeasuredWidth(); int bottom = top + view.getMeasuredHeight(); if (view.isClickable() && y >= top && y <= bottom && x >= left && x <= right) { return true; } return false; }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved