2016-12-19 3 views
-1

イメージにレイアウトが表示されています。 enter image description here私はインプリメントしたいすべてのリングを1、2、3、4で別々にクリックします。
これを行う方法?
お願いします!実装チャートをクリック

+0

は、ビューにさらに情報ベースが必要です。これはカスタムビューですか?それは何のように構築されていますか?各リングはコンポーネントですか? –

+0

Bro、各リングはCircular ProgressBarです。 –

+1

さて、各プログレスバーにクリックリスナーを追加してください。そして、ppl 'bro'に電話しないでください。それは邪魔です。 –

答えて

0

これは次のようになります。

public class CustomProgressBar extends ProgressBar { 


    private boolean shouldHandleClick(float x, float y) { 
     /* 
     return true if click is within the ring 

     For this to work you will have to calculate where exactly the ring is, 
     then its just a matter of determining whether the click is inside the area or not. 
     Might take some doing. 
     */ 


    } 

    // thanks to http://stackoverflow.com/questions/17831395/how-can-i-detect-a-click-in-an-ontouch-listener 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     // this will check if its a click and calculate if it's within your area of interest. 
     if (isAClick(startX, endX, startY, endY) && !shouldHandleClick(event.getX(),event.getY())) 
      return false; 

     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      startX = event.getX(); 
      startY = event.getY(); 
      break; 
     case MotionEvent.ACTION_UP: 
      float endX = event.getX(); 
      float endY = event.getY(); 
      if (isAClick(startX, endX, startY, endY)) { 
       launchFullPhotoActivity(imageUrls);// WE HAVE A CLICK!! 
      } 
      break; 
     default: 
      return super.onTouch(v,event); 
     } 

     return true; 
    } 

    private boolean isAClick(float startX, float endX, float startY, float endY) { 
     float differenceX = Math.abs(startX - endX); 
     float differenceY = Math.abs(startY - endY); 
     if (differenceX > CLICK_ACTION_THRESHHOLD/* =5 */ || differenceY > CLICK_ACTION_THRESHHOLD) { 
      return false; 
     } 
     return true; 
    } 
} 
関連する問題