2016-12-19 6 views
-1

Ich habe ein Layout im Bild gezeigt. enter image description here Ich möchte implementieren Klicken Sie auf alle Ringe separat d. H. 1, 2, 3, 4.
Wie geht das?
Bitte Hilfe !!Implementieren Klicken Sie auf ein Diagramm

+0

benötigen weitere Informationen in der Ansicht. Ist das eine benutzerdefinierte Ansicht? Wie ist es aufgebaut? Jeder Ring ist eine Komponente? –

+0

Bro, Jeder Ring ist eine kreisförmige ProgressBar .. –

+1

Nun, fügen Sie Klick-Listener zu jedem Fortschrittsbalken. Und bitte nenne nicht ppl 'bro', das ist störend. –

Antwort

0

Es sollte in etwa so aussehen.

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; 
    } 
} 
Verwandte Themen