1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問(wèn)題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      Android怎么判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部-創(chuàng)新互聯(lián)

      這篇文章將為大家詳細(xì)講解有關(guān)Android怎么判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

      創(chuàng)新互聯(lián)是一家專業(yè)提供邵武企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、html5、小程序制作等業(yè)務(wù)。10年已為邵武眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

      我們都知道,一個(gè)圓形的ImageView控件(本項(xiàng)目中使用的圓形控件是github上的),其實(shí)所占的區(qū)域還是正方形區(qū)域,只是顯示內(nèi)容為圓形,當(dāng)我們給ImageView設(shè)置觸摸事件時(shí),沒(méi)有顯示區(qū)域也會(huì)相應(yīng)點(diǎn)擊事件,而我們可以通過(guò)計(jì)算當(dāng)前點(diǎn)擊的位置來(lái)判斷ImageView是否相應(yīng)觸摸事件。

      效果如圖所示:

      Android怎么判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部

      如上圖所示,當(dāng)點(diǎn)擊圓之內(nèi)拖動(dòng)時(shí),圓跟著移動(dòng),但是點(diǎn)擊圓之外拖動(dòng)時(shí),圓沒(méi)有任何反應(yīng)。

      要實(shí)現(xiàn)這個(gè)效果并不難,首先,先計(jì)算出圓的中心點(diǎn)坐標(biāo)(x1,y1),注意,x1,y1是相對(duì)于屏幕的坐標(biāo),不是相對(duì)于布局的坐標(biāo);
      然后獲取當(dāng)前按下的坐標(biāo)(x2,y2),只需要計(jì)算出當(dāng)前按下的點(diǎn)的坐標(biāo)(x2,y2)與圓心(x1,y1)的距離d的長(zhǎng)度,然后與圓的半徑r相比較,如果d>r則當(dāng)前按下的點(diǎn)在圓之外,如果d<r,則當(dāng)前按下的點(diǎn)在圓之內(nèi), 如下圖所示:

      Android怎么判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部

      這樣注意一下,以上都應(yīng)在MotionEvent.ACTION_DOWN里面計(jì)算,當(dāng)距離d大于半徑r時(shí),return false,則當(dāng)前控件不消費(fèi)事件,

      代碼如下:

      public class MainActivity extends Activity {
      
       int lastX;
       int lastY;
       boolean isView = false;
      
       @Override
       protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
      
       final CircleImageView civ = (CircleImageView) findViewById(R.id.civ_levitate);
      
       civ.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
      
        switch (event.getAction()){
         case MotionEvent.ACTION_DOWN:
      
         lastX = (int) event.getRawX();
         lastY = (int) event.getRawY();
      
         //獲取控件在屏幕的位置
         int[] location = new int[2];
         civ.getLocationOnScreen(location);
      
         //控件相對(duì)于屏幕的x與y坐標(biāo)
         int x = location[0];
         int y = location[1];
      
      
         //圓半徑 通過(guò)左右坐標(biāo)計(jì)算獲得getLeft
         int r = (civ.getRight()-civ.getLeft())/2;
      
         //圓心坐標(biāo)
         int vCenterX = x+r;
         int vCenterY = y+r;
      
         //點(diǎn)擊位置x坐標(biāo)與圓心的x坐標(biāo)的距離
         int distanceX = Math.abs(vCenterX-lastX);
         //點(diǎn)擊位置y坐標(biāo)與圓心的y坐標(biāo)的距離
         int distanceY = Math.abs(vCenterY-lastY);
         //點(diǎn)擊位置與圓心的直線距離
         int distanceZ = (int) Math.sqrt(Math.pow(distanceX,2)+Math.pow(distanceY,2));
      
         //如果點(diǎn)擊位置與圓心的距離大于圓的半徑,證明點(diǎn)擊位置沒(méi)有在圓內(nèi)
         if(distanceZ > r){
          return false;
         }
      
         isView = true;
      
         break;
      
         case MotionEvent.ACTION_MOVE:
      
         if(isView){
      
          int moveX = (int) event.getRawX();
          int moveY = (int) event.getRawY();
      
          int disX = moveX - lastX;
          int disY = moveY - lastY;
      
          int left = civ.getLeft()+disX;
          int right = civ.getRight()+disX;
          int top = civ.getTop()+disY;
          int bottom = 
          civ.getBottom()+disY;
      
          civ.layout(left,top,right,bottom);
      
          lastX = moveX;
          lastY = moveY;
         }
      
      
         break;
      
         case MotionEvent.ACTION_UP:
      
      
         isView = false;
      
      
         break;
        }
      
        return true;
        }
       });
      
       }
      }

      關(guān)于“Android怎么判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。


      網(wǎng)頁(yè)題目:Android怎么判斷當(dāng)前點(diǎn)擊位置是否在圓的內(nèi)部-創(chuàng)新互聯(lián)
      文章起源:http://www.ef60e0e.cn/article/doigee.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        凤阳县| 济阳县| 类乌齐县| 木兰县| 和顺县| 江达县| 望江县| 大兴区| 象州县| 天津市| 城步| 黄山市| 新平| 永福县| 仁化县| 五大连池市| 赤壁市| 邵东县| 郧西县| 兴安县| 宁国市| 汉寿县| 方城县| 星子县| 无棣县| 偏关县| 鹰潭市| 邯郸县| 洛隆县| 始兴县| 巨野县| 丰都县| 泗洪县| 潢川县| 凌源市| 徐闻县| 政和县| 芜湖县| 正宁县| 昌邑市| 三都|