91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Android自定義View中的onTouchEvent(MotionEvent event)事件監聽

發布時間:2020-07-31 19:42:38 來源:網絡 閱讀:3817 作者:拾荒者老大 欄目:移動開發


今天做一個自定義ViewGroup,通過addView動態添加子控件,為了省事,直接在父控件里重寫public boolean onTouchEvent(MotionEvent event){}方法來監聽當前觸碰是哪個按鈕,遇到點問題,所以寫下來。

首先是點擊效果只有 MotionEvent.ACTION_DOWN,這個把返回改為return true;就行了

然后是 getX()和getRawX()的區別,這個這篇博文有寫到

http://www.cnblogs.com/foura/articles/2016881.html

總結就是:getX()是表示Widget相對于自身左上角的x坐標,而getRawX()是表示相對于屏幕左上角的x坐標值(注意:這個屏幕左上角是手機屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一樣的道理

之前設置矩形一直是

rects.add(new Rect());

getChildAt(i).getGlobalVisibleRect(rects.get(i));但今天出了點問題,因為今天使用的是dialog主題.所以坐標一直不對,

只好直接使用 rects.add(new Rect(v.getLeft(),v.getTop(),v.getRight(),v.getBottom()));

使用子View在父View中的位置來繪制矩形,然后比較父View的getX()方法。

關于這些看著頭暈的方法的區別,主要是參考這篇,來區分哪個是相對屏幕,哪個是相對自己

http://blog.csdn.net/centralperk/article/details/7949900

尤其是這個getLeft , getTopgetBottomgetRight,  這一組是獲取子View相對在它父View里的坐標,這個的幫助。

這邊隨便貼個監聽的方法,當然還要完善一下才能用,解決點小問題

	private ArrayList<Rect> rects = new ArrayList<Rect>();
	private int eventX = 0;
	private int eventY = 0;
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
//		Log.e("", "_____"+event.getAction());
		if(event.getAction() == MotionEvent.ACTION_DOWN){
			eventX = (int) event.getX();
			eventY = (int) event.getY();
		}
		//判斷當前用戶點擊的那一項
		if (event.getAction() == MotionEvent.ACTION_UP) {
			int upX = (int) event.getX();
			int upY = (int) event.getY();
			if(Math.abs(upX-eventX)<50&&Math.abs(upY-eventY)<50){
				for (int i = 0,len=getChildCount(); i < len; i++) {
					if(rects.size() < len){
						View v = getChildAt(i);
						rects.add(new Rect(v.getLeft(),v.getTop(),v.getRight(),v.getBottom()));
					}
//            		Log.e("", +upX+"+"+event.getRawX()+"__"+upY+"+"+event.getRawY()+"___"+rects.get(i));
					if(rects.get(i).contains(upX, upY)){
						Log.e("", "i__"+i);
						getChildAt(i).setSelected(true);
					}else{
						getChildAt(i).setSelected(false);
					}
				}
			}
		}
		return true;
	}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延庆县| 舞阳县| 镇宁| 姜堰市| 邵阳县| 阿拉善盟| 聊城市| 介休市| 乐都县| 龙陵县| 黄石市| 陕西省| 方城县| 当雄县| 普兰店市| 绥江县| 蓬安县| 永登县| 墨竹工卡县| 贵州省| 页游| 乌海市| 化德县| 扶余县| 汤阴县| 安阳市| 唐山市| 大连市| 会宁县| 海南省| 瑞昌市| 香河县| 开阳县| 进贤县| 海原县| 封丘县| 石楼县| 武汉市| 宜川县| 瑞金市| 石嘴山市|