1. 程式人生 > >Android 根據座標獲取控制元件方法

Android 根據座標獲取控制元件方法

/**
	 * 根據座標獲取相對應的子控制元件<br>
	 * 在Activity使用
	 * 
	 * @param x座標
	 * @param y座標
	 * @return 目標View
	 */
	public View getViewAtActivity(int x, int y) {
		// 從Activity裡獲取容器
		View root = getWindow().getDecorView();
		return findViewByXY(root, x, y);
	}

	/**
	 * 根據座標獲取相對應的子控制元件<br>
	 * 在重寫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<View> 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;
	}

相關推薦

Android 根據座標獲取控制元件方法

/** * 根據座標獲取相對應的子控制元件<br> * 在Activity使用 * * @param x座標 * @param y座標 * @return 目標V

Android中的獲取控制元件矩陣gethitrect方法

原文地址:http://souly.cn/%E6%8A%80%E6%9C%AF%E5%8D%9A%E6%96%87/2015/07/31/Android%E4%B8%AD%E7%9A%84%E8%8E%B7%E5%8F%96%E6%8E%A7%E4%BB%B6%E7%9F%

Android通過findViewById()獲取控制元件為NULL

如果在activity中直接呼叫findViewById方法,它的完整形式是this.findViewById().而我所需要的控制元件是不存在本身activity的佈局中的.所以要通過控制元件所在的view呼叫findViewById方法,就可以獲取到正確的控制元件了

Android中findViewById()獲取控制元件後 報 空指標 錯誤

今天再做一個程式時,發現我使用findViewById(R.id.edit)獲取EditText時總是報空指標錯誤,我想不可能啊!! 最後從findViewById()下手,才發現原來此方法中的R.id.edit是從當前Activity或者Dialog的主佈局檔案xml中獲

Android 獲取控制元件座標位置

知識點很少,只是為了做個筆記 獲取一下控制元件,比如 button EditText……的座標位置 View v1 = (View) button1; View v2 = (View) editText1; int[] l1 = {0, 0}; int[] lv2 =

Android根據座標判斷是否在控制元件

在Android的ontouch事件中: event.getX()和event.getY()得到的是座標相對於父佈局中的座標; 相對於螢幕中的座標;event.getRawX()和event.getRawY()得到的座標是相對於螢幕中的座標; 如圖,view的getLef

Android 在Activity中獲取控制元件尺寸的方法

上Layout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com

Android獲取控制元件大小的方法

在Android中很多時候都需要獲取到控制元件的大小,這樣對於佈局的計算有許多的幫助,比如一個GridView佈置成多少行多少列是需要提前知道自己允許的最大的高度和寬度才能計算,這樣就需要得到控制元件的大小。控制元件的大小是在View的measure的過程計算出來的。所有我

GetPathFromUri4kitkat【Android 4.4 kitkat以上及以下根據uri獲取路徑的方法

under als providers textview href 數據權限 res activit nload 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 前言 在Android4.4之前和之後,通過Intent調用文件管理器選擇文件,獲取的文件uri地址形

android獲取螢幕寬高與獲取控制元件寬高

// 獲取螢幕寬高(方法1) int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 螢幕寬(畫素,如:480px) int screenHeight = getWindowManager().getDe

獲取控制元件相對父視窗的座標

首先說明幾個常用windows API函式 1.GetClientRect 該函式獲取視窗客戶區的大小。注意一下:視窗的客戶區為視窗中除標題欄、選單欄之外的地方。 在Win32 SDK, 該API函式原型為 BOOL GetClientRect( HWND hWnd, //

android 禁止scrollview 因控制元件變化自動滾動到底的方法

網上的說法是焦點問題導致,新焦點在下面時,檢視會滾動使焦點可見。但網上提的在scrollview裡層的LinearLayout裡新增    android:focusable="true" android:focusableIn

Android獲取控制元件尺寸的時機

在Android開發的時候,我們通常要獲取控制元件的大小。在activity中獲取控制元件的大小,onCreate()方法獲取到的值往往是0,是因為在系統執行該方法的時候,控制元件還沒有繪製完成。而在activity獲取或失去焦點的時候會呼叫一個onWindowFocusCh

安卓開發學習筆記(五):史上最簡單且華麗地實現Android Stutio當中Webview控制元件https/http協議的方法

一.我們先在XML當中自定義一個webview(Second_layout.xml) 程式碼如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.an

Android 獲取控制元件的寬和高

我們都知道在onCreate()裡面獲取控制元件的高度是0,這是為什麼呢?我們來看一下示例: 首先我們自己寫一個控制元件,這個控制元件非常簡單: publicclass MyImageView extends ImageView {       public M

Android kotlin 之 Fragment怎樣直接獲取控制元件

在onCreateView方法中你可以直接使用當前佈局返回的view.id來使用控制元件。 override fun onCreateView(inflater: LayoutInflater

android自動化測試中hierarchyviewer和uiautomatorviewer獲取控制元件資訊的方式比對

android自動化新人一個,目前研究PC端獲取android裝置的控制元件資訊有哪些方式。多多指教!         android的目錄tools下有2個自帶的工具hierarchyviewer和uiautomatorviewer,開啟後,如下所示:

WPF獲取控制元件位置的方法

WPF中提供了多種佈局方式,因此在佈局中的定位相對於WinForm的絕對定位要靈活的多,在WPF中,控制元件均沒有如WinForm中的Location屬性,但是,對應的提供了各種設定與獲取相對於承載元素的定位 一般來說,Wpf中的佈局控制元件大多都是相對定位(網格,流式,面板等),如果我們要改變控制元

android自動化測試中hierarchyviewer和uiautomatorviewer獲取控制元件資訊的方式比對(2)

       在上一篇我簡單的瞭解了一下hierarchyviewer和uiautomatorviewer,如需訪問,點選以下連結:        通過對hierarchyview的原始碼分析,我嘗試用java寫了一個測試工具,該測試工具簡單的實現了連線ViewServe

Android中動態改變控制元件的大小的一種方法

    在Android中有時候我們需要動態改變控制元件的大小。有幾種辦法可以實現  一是在onMeasure中修改尺寸,二是在onLayout中修改位置和尺寸。這個是可以進行位置修改的,onMeasure不行。 還有一種是用LayoutParams來進行修改。前兩種方法都