Przeciągając mam na myśli zmianę rawX i rawY widżetu w następujący sposób:
view.y = motionEvent.rawY - ((view.height / 2) + 120)
view.x = motionEvent.rawX - view.width / 2
Mój układ zawiera widok karty i kilka obrazów, które można przeciągać, dotykając ich i przesuwając. Przeciąganie działa, ale obrazy znikają poza granicami widoku karty:
(Obraz na środku został przeciągnięty w dół i teraz jest widoczny tylko w połowie, ponieważ został przeciągnięty poza granice widoku karty).
Mój układ:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android.navigation.TitleFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="8dp"
app:cardBackgroundColor="#f2f2f2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:padding="8dp">
<ImageView
android:id="@+id/card1"
android:layout_width="@dimen/expense_card_image_size"
android:layout_height="@dimen/expense_card_image_size"
android:scaleType="centerCrop"
android:clickable="true"
android:focusable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:contentDescription="@string/content_description_groceries"
android:src="@drawable/groceries"/>
<ImageView
android:id="@+id/card2"
android:layout_width="@dimen/expense_card_image_size"
android:layout_height="@dimen/expense_card_image_size"
android:scaleType="centerCrop"
android:clickable="true"
android:focusable="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:contentDescription="@string/content_description_rent"
android:src="@drawable/rent"/>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Co mogę zrobić, aby umożliwić przeciąganie obrazów poza widok karty?
Z góry dziękuję
2 odpowiedzi
Nie widziałem twojego kodu java, ale myślę, że powinieneś pozwolić użytkownikowi przeciągnąć CardView, a nie ImageView w nim. Rozumiem, że Twój CardView robi dokładnie to, co powinien. a mianowicie zapewnienie rodzaju okna lub wycięcia, w którym widoczne są zawarte w nim podglądy obrazów (użyłem ich, na przykład, aby moje obrazy były okrągłe)
Jeśli chcesz, aby obrazy wyglądały tak, jakby znajdowały się w CardView lub innym kontenerze, możesz umieścić ImageViews poza CardView, a następnie sprawić, by były wyświetlane nad nim przy użyciu RelativeLayout. wtedy możesz śledzić ich współrzędne, aby zobaczyć, czy uważasz, że wypadają „w jego wnętrzu” czy „na zewnątrz”
Nie możesz przeciągnąć go poza CardView
, jeśli chcesz przeciągnąć obraz na cały ekran, przenieś imageView
do górnego układu nadrzędnego
Ten kod pozwoli imageView
przeciągnąć na cały ekran
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android.navigation.TitleFragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/card"
android:layout_width="0dp"
android:layout_height="@dimen/expense_card_image_size"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:elevation="8dp"
android:padding="8dp"
app:cardBackgroundColor="#f2f2f2" />
</FrameLayout>
<ImageView
android:id="@+id/card1"
android:layout_width="@dimen/expense_card_image_size"
android:layout_height="@dimen/expense_card_image_size"
android:clickable="true"
android:contentDescription="@string/content_description_groceries"
android:focusable="true"
android:scaleType="centerCrop"
android:src="@drawable/groceries"
app:layout_constraintStart_toStartOf="@id/card"
app:layout_constraintTop_toTopOf="@id/card" />
<ImageView
android:id="@+id/card2"
android:layout_width="@dimen/expense_card_image_size"
android:layout_height="@dimen/expense_card_image_size"
android:clickable="true"
android:contentDescription="@string/content_description_rent"
android:focusable="true"
android:scaleType="centerCrop"
android:src="@drawable/rent"
app:layout_constraintEnd_toEndOf="@id/card"
app:layout_constraintTop_toTopOf="@id/card" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Podobne pytania
Nowe pytania
android
Android to mobilny system operacyjny Google, używany do programowania lub tworzenia urządzeń cyfrowych (smartfony, tablety, samochody, telewizory, Wear, Glass, IoT). W przypadku tematów związanych z Androidem użyj tagów specyficznych dla Androida, takich jak android-intent, android-activity, android-adapter itp. W przypadku pytań innych niż programowanie lub programowanie, ale związanych ze strukturą Androida, użyj tego linku: https: // android.stackexchange.com.