2016-08-28 4 views
-2

Я хотел бы перетащить черный ящик за пределы оранжевого контейнера и снова перетащить его. Черное изображение не реагирует на касание, когда оно находится за пределами оранжевого окна. Я могу только перетащить черный ящик, если он упал где-то в оранжевой коробке.Как перетащить представление после его перетаскивания за пределы его родителя?

Screenshot of app

Мой код выглядит следующим образом:

activity_main.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:clipChildren="false" 
    android:clipToPadding="false" 
    android:gravity="center"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="@android:color/holo_orange_dark" 
     android:gravity="center" 
     android:clipChildren="false" 
     android:clipToPadding="false" 
     android:padding="20dp"> 

     <com.example.noname.myapplication.DraggableImageView 
      android:id="@+id/activity_animation_icon_imageview" 
      android:layout_width="130dp" 
      android:layout_height="130dp" 
      android:layout_marginTop="30dp" 
      android:layout_marginBottom="35dp" 
      android:background="#000000"/> 

    </LinearLayout> 

</LinearLayout> 

DraggableImageView.java

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    } 
} 

Заранее спасибо :)

ответ

0
activity_main.xml 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:clipChildren="false" 
    android:clipToPadding="false" 
    android:gravity="center"> 




     <launcher.simpleapp.vr.com.draggableimageview.DraggableImageView 
      android:id="@+id/activity_animation_icon_imageview" 
      android:layout_width="130dp" 
      android:layout_height="130dp" 
      android:layout_marginTop="30dp" 
      android:layout_marginBottom="35dp" 
      android:background="#000000"/> 



</LinearLayout> 


Draggable ImageView 



import android.content.Context; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 

/** 
* Created by cvija on 8/28/2016. 
*/ 
public class DraggableImageView extends ImageView{ 


     int dX, dY; 
    private int _xDelta; 
    private int _yDelta; 

     public DraggableImageView(Context context, AttributeSet attrs) { 
      super(context, attrs); 
     } 


     @Override 
     public boolean onTouchEvent(MotionEvent event) { 

      LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) getLayoutParams(); 
      _xDelta = dX - lParams.leftMargin; 
      _yDelta = dY - lParams.topMargin; 
      switch (event.getAction()) { 

       case MotionEvent.ACTION_DOWN: 

        dX = (int)(getX() - event.getRawX()); 
        dY = (int)(getY() - event.getRawY()); 
        break; 

       case MotionEvent.ACTION_MOVE: 

        animate() 
          .x(event.getRawX() + dX) 
          .y(event.getRawY() + dY) 
          .setDuration(0) 
          .start(); 
        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) 
          getLayoutParams(); 
        layoutParams.leftMargin = dX - _xDelta; 
        layoutParams.topMargin = dY - _yDelta; 
        layoutParams.rightMargin = -250; 
        layoutParams.bottomMargin = -250; 
        setLayoutParams(layoutParams); 
        invalidate(); 
        break; 
       default: 
        return true; 
      } 
      return true; 
     } 
    } 

The same is working fine for me 
0

Это чувство ваше прикосновение будет проходит в пути представления группы первых, то вы получите контроль на ваш взгляд

Таким образом, вы сохранили изображение в линейной компоновке, чтобы у вас был контроль только внутри линейного макета.

Смежные вопросы