2016-03-28 21 views
-1

Ekrandaki bir düğmeyi taşımak için bu kodu kullanıyorum ancak yanlara ulaştığımda ekranlardan çıkıyor.Ekrandan çıkmayan hareketli bir düğme nasıl oluşturulur

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

Ayrıca arka plan rengini de değiştirdiyse ve aynı zamanda tıklanabilir hale getirdim.

enter image description here

Ben layout'ta o düğmeye tutmak gerekir.

Ayrıca this ve this bağlantılarını denedim, ancak bu yaklaşımların her ikisi de yanlara taşınırken düğmeyi sıkıştırmaya neden oluyor.

Lütfen

Yardım edin. Şimdiden teşekkürler.

enter image description here

cevap

0

Eh onun X'in yerini almak ve "doğru" kenar nerede olduğunu görmek için ona genişliğini ekleyip karşılaştırmak gerekir o büyük veya viewport'da en genişliğine eşit ise. Bir süredir JAVA yazmamıştım ama bu hile yapmalı.

Bulunduğunuz yeri kontrol ediyor musunuz?

Belki Belki animate() yönteminde

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

sizin kontrol yok. Bunun gerçekleşmesine bakarken, benim için tahmin etmek zor. Etkinliği ne ateş ediyor? Event.getRawX() nasıl eşittir? Ekrandaki temas noktası bu mu? Nokta seçildikten sonra animasyon yapıyor musunuz? Ya da bir min/max x ve min/max y tanımlayabilir ve dairenizin bunu geçmesine izin veremezsiniz.

  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

Fikrinizi aldım ve bunu denedim, ancak uygulamamın yolu çalışmıyor. –

İlgili konular