今天做一個自定義ViewGroup,通過addView動態(tài)添加子控件,為了省事,直接在父控件里重寫public boolean onTouchEvent(MotionEvent event){}方法來監(jiān)聽當(dāng)前觸碰是哪個按鈕,遇到點問題,所以寫下來。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)桓仁免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
首先是點擊效果只有 MotionEvent.ACTION_DOWN,這個把返回改為return true;就行了
然后是 getX()和getRawX()的區(qū)別,這個這篇博文有寫到
http://www.cnblogs.com/foura/articles/2016881.html
總結(jié)就是:getX()是表示W(wǎng)idget相對于自身左上角的x坐標(biāo),而getRawX()是表示相對于屏幕左上角的x坐標(biāo)值(注意:這個屏幕左上角是手機屏幕左上角,不管activity是否有titleBar或是否全屏幕),getY(),getRawY()一樣的道理
之前設(shè)置矩形一直是
rects.add(new Rect());
getChildAt(i).getGlobalVisibleRect(rects.get(i));但今天出了點問題,因為今天使用的是dialog主題.所以坐標(biāo)一直不對,
只好直接使用 rects.add(new Rect(v.getLeft(),v.getTop(),v.getRight(),v.getBottom()));
使用子View在父View中的位置來繪制矩形,然后比較父View的getX()方法。
關(guān)于這些看著頭暈的方法的區(qū)別,主要是參考這篇,來區(qū)分哪個是相對屏幕,哪個是相對自己
http://blog.csdn.net/centralperk/article/details/7949900
尤其是這個getLeft , getTop, getBottom, getRight, 這一組是獲取子View相對在它父View里的坐標(biāo),這個的幫助。
這邊隨便貼個監(jiān)聽的方法,當(dāng)然還要完善一下才能用,解決點小問題
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(); } //判斷當(dāng)前用戶點擊的那一項 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; }
名稱欄目:關(guān)于Android自定義View中的onTouchEvent(MotionEventevent)事件監(jiān)聽
轉(zhuǎn)載來源:http://www.rwnh.cn/article14/jespge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、企業(yè)建站、App設(shè)計、網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)