2016-04-04 25 views
0

Sürüklendiğinde hareketli bir resim uygulamak istiyorum. Sürükleme mükemmel çalışıyor. Ama sonuna kadar sürüklediğimde, imageView ekrandan çıkıyor. Görüntü ekranının hareketli ekranını sadece ekranın içinde nasıl yapabilirim?Bir Imageview sürüklenirken ekranın dışına çıkar

Bu benim OnTouch listerner geçerli:

public boolean onTouch(View view, MotionEvent event) { 
    switch (event.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: 
     dX = view.getX() - event.getRawX(); 
     dY = view.getY() - event.getRawY(); 
     lastAction = MotionEvent.ACTION_DOWN; 
     break; 

     case MotionEvent.ACTION_MOVE: 
     view.setY(event.getRawY() + dY); 
     view.setX(event.getRawX() + dX); 
     lastAction = MotionEvent.ACTION_MOVE; 
     break; 

     case MotionEvent.ACTION_UP: 
     if (lastAction == MotionEvent.ACTION_DOWN) 
      Toast.makeText(DraggableView.this, "Clicked!", Toast.LENGTH_SHORT).show(); 
     break; 

     default: 
     return false; 
    } 
    return true; 
    } 

ve bu benim düzenidir. Düzen, bir scrollview ve onların çocukları ve sürüklemek istediğim imageview içerir.

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clickable="true" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:background="#ff0000" 
       android:gravity="center" 
       android:text="View 1" 
       android:textColor="#000" 
       android:textSize="100dp" /> 

      <TextView 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:background="#00ff00" 
       android:text="View 2" 
       android:textColor="#000" 
       android:textSize="100dp" /> 
     </LinearLayout> 
    </ScrollView> 

    <ImageView 
     android:id="@+id/draggable_view" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_gravity="bottom|right" 
     android:layout_marginBottom="20dp" 
     android:layout_marginEnd="20dp" 
     android:background="@drawable/icon" /> 

</FrameLayout> 

cevap

2

Daha fazla zaman harcadıktan sonra, sonunda en iyi çözümü bulun. Mükemmel çalışıyor

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
screenHight = displaymetrics.heightPixels; 
screenWidth = displaymetrics.widthPixels; 

    @SuppressLint("NewApi") @Override 
    public boolean onTouch(View view, MotionEvent event) { 


     float newX, newY; 

    switch (event.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: 

     dX = view.getX() - event.getRawX(); 
     dY = view.getY() - event.getRawY(); 
     lastAction = MotionEvent.ACTION_DOWN; 
     break; 

     case MotionEvent.ACTION_MOVE: 

      newX = event.getRawX() + dX; 
      newY = event.getRawY() + dY; 

     // check if the view out of screen 
      if ((newX <= 0 || newX >= screenWidth-view.getWidth()) || (newY <= 0 || newY >= screenHight-view.getHeight())) 
      { 
       lastAction = MotionEvent.ACTION_MOVE; 
       break;  
      } 

     view.setX(newX); 
     view.setY(newY); 

     lastAction = MotionEvent.ACTION_MOVE; 

     break; 

     case MotionEvent.ACTION_UP: 
     if (lastAction == MotionEvent.ACTION_DOWN) 
      Toast.makeText(DraggableView.this, "Clicked!", Toast.LENGTH_SHORT).show(); 
     break; 

     default: 
     return false; 
    } 
    return true; 
    } 

:)

: olarak

benim OnTouch listerner Değiştirin bölümünün