2016-03-28 2 views
-1

Ich benutze diesen Code, um eine Schaltfläche auf dem Bildschirm zu verschieben, aber wenn ich die Seiten erreichen, bewegt es sich aus den Bildschirmen.So erstellen Sie eine bewegliche Schaltfläche, die nicht aus dem Bildschirm bewegt

private float mPrezX, mPrevY; 

    private static final int MAX_CLICK_DURATION = 200; 
    private long startClickTime; 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     int action = event.getActionMasked(); 

     Button gvup = (Button)findViewById(R.id.giveup); 
     gvup.setBackground(getResources().getDrawable(R.drawable.btn)); 

     switch (action) { 
      case MotionEvent.ACTION_DOWN: { 
       mPrevX = view.getX() - event.getRawX(); 
       mPrevY = view.getY() - event.getRawY(); 
       startClickTime = Calendar.getInstance().getTimeInMillis();//!! 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      } 
      case MotionEvent.ACTION_MOVE: 
      { 
       view.animate() 
        .x(event.getRawX() + mPrevX) 
        .y(event.getRawY() + mPrevY) 
        .setDuration(0) 
        .start(); 

       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      } 
      case MotionEvent.ACTION_CANCEL: 
       gvup.setBackground(getResources().getDrawable(R.drawable.btn1)); 
       break; 
      case MotionEvent.ACTION_UP: 
       long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime; 
       if(clickDuration < MAX_CLICK_DURATION) { 
        //click event has occurred 
        gvup.setBackground(getResources().getDrawable(R.drawable.btn)); 
        giveUp(); 
       } 
       break; 
     } 
     return true; 
    } 

Ich ändere auch seine Hintergrundfarbe, wenn gedrückt und auch klickbar gemacht.

enter image description here

Ich brauche diesen Knopf im Layout zu halten.

Ich habe auch this und this Links versucht, aber beide Ansätze führen dazu, den Knopf zu drücken, wenn sie zu den Seiten bewegt werden.

Bitte helfen. Vielen Dank im Voraus.

enter image description here

Antwort

0

Nun müssen Sie den X Standort erhalten und fügen Sie seine Breite zu sehen, wo die „richtige“ Kante ist und vergleichen, wenn sie größer oder gleich Breite Ihres Ansichtsfensters. Ich habe JAVA schon länger nicht mehr geschrieben, aber das sollte reichen.

Überprüfen Sie den Standort?

Vielleicht

int rightEdge = currentPos.X + itsWidth; 
if(rightEdge >= screenWidth) // something here 

Vielleicht in Ihrem belebten() -Methode tun, um Ihre Kontrolle. Es ist schwer für mich zu erraten, ohne zu sehen, was das alles möglich macht. Was schießt das Ereignis? Was ist event.getRawX() gleich? Ist das ein Berührungspunkt auf dem Bildschirm? Animieren Sie die Animation, nachdem der Punkt ausgewählt wurde? Oder Sie können ein min/max x und min/max y definieren und nicht Ihren Kreis darüber hinausgehen lassen.

  view.animate() 
       if(.x(event.getRawX() + mPrevX) > screenWidth){ 
         .x(screenwidth - circleWidth) 
       } // do the same for the Y - must check the max and min for both Y and X 
       .x(event.getRawX() + mPrevX) 
       .y(event.getRawY() + mPrevY) 
       .setDuration(0) 
       .start(); 
+0

Ich habe Ihre Idee und ich habe es versucht, aber es funktioniert nicht die Art, wie ich es implementiere. –

Verwandte Themen