Uygulamamda, görüntüyü yalnızca üst düzeninde sürüklemek istiyorum, ancak tüm cihaz ekranında sürükleniyor. Bunu başarmak için elimden geleni yaptım ama hiçbir çözüm bulamadım.Android'de bir görünüm için dragzone'u nasıl kısıtlayabilirim?
Burada xml'mi ve kodumu ekledim. Bunun için aradım ama çözümü bulamadım. Bu sorunu çözmemde bana yardımcı olan var mı?
Resimde, neyi başarmak istediğimi açıkça belirtmiştim.Y1 ve y2 değerlerinde sürüklenen görüntüyü sınırlamak istiyorum.
benim xml:
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainlayout"
tools:context=".MainActivity" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:id="@+id/images">
<!-- cartoon image -->
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/img_1"
android:layout_centerInParent="true"
android:id="@+id/cartoon_image">
<RelativeLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@drawable/play_btn"
android:orientation="horizontal"
android:layout_centerInParent="true"
android:id="@+id/play_btn"
>
</RelativeLayout>
</RelativeLayout>
<!-- end of cartoon image -->
</RelativeLayout>
</RelativeLayout>
Benim Etkinlik:
public class MainActivity extends Activity {
RelativeLayout rlImages,Cartoon_image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Cartoon_image=(RelativeLayout)findViewById(R.id.cartoon_image);
rlImages=(RelativeLayout)findViewById(R.id.images);
rlImages.setOnDragListener(new MyDragListener());
Cartoon_image.setOnTouchListener(new MyTouchListener());
}
private final class MyTouchListener implements OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
view.startDrag(data, shadowBuilder, view, 0);
view.setVisibility(View.INVISIBLE);
return true;
} else {
return false;
}
}
}
class MyDragListener implements OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
int dragAction = event.getAction();
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
break;
case DragEvent.ACTION_DRAG_ENTERED:
Log.e("in entered","in enter");
break;
case DragEvent.ACTION_DRAG_EXITED:
Log.e("in exited","in exit");
break;
case DragEvent.ACTION_DROP:
Float s1=event.getX();
Float s2=event.getY();
int x=Integer.valueOf(s1.intValue());
int y=Integer.valueOf(s2.intValue());
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container = (RelativeLayout) v;
container.addView(view);
break;
case DragEvent.ACTION_DRAG_ENDED:
Log.e("xs"+(int)event.getX(),"xs"+(int)event.getX());
v.setVisibility(View.VISIBLE);
if (dropEventNotHandled(event)) {
v.setVisibility(View.VISIBLE);
}
view.setVisibility(View.VISIBLE);
default:
break;
}
return true;
}
private boolean dropEventNotHandled(DragEvent dragEvent) {
return !dragEvent.getResult();
}
}
}![I have added the image for better understanding,Please find it][1]
1:
Bu projeyi gördüm, gereksinimime çok benziyor. Bunu başarmanın başka bir yolu olduğunu biliyorum. – user1891910