2010-11-05 12 views
12

Mam ImageView i chcę, aby było klikalne. Sam obraz ma tylko 32 x 32 piksele, ale chcę, aby klikalny region był większy, więc łatwiej trafić. Miałem nadzieję, że mogę ustawić wartości marginesów układ do zwiększenia rozmiaru obszaru klikalnego w ImageView za:Rozwiń klikalny obszar ImageView za pomocą wypełnienia?

<ImageView 
    layout_width="32dip" 
    layout_height="32dip" 
    layout_margin="20dip" /> 

To nie działa, co mogę zrobić, to po prostu odtworzyć źródło obrazu, aby mieć większy obszar przezroczysty wokół to. To trochę denerwujące, ponieważ trudno zmienić ustawienia, jeśli kiedykolwiek będę musiał zmienić klikalny region. To nie tylko pojedynczy png, jest to statelistdrawable, więc muszę zmienić rozmiar 3 różnych pngs, jeśli kiedykolwiek będę musiał poprawić obszar klikalny.

Coś jeszcze mogę zrobić?

Dzięki

+0

To rozwiązanie może być dla Ciebie przydatne: http://stackoverflow.com/questions/3475350/how-to-set-a-clickable-region-for-an-imageview – McStretch

+1

Wiem, że zostało już udzielone, ale w te przypadki, które chcesz użyć TouchDelegate: http://developer.android.com/reference/android/view/TouchDelegate.html –

Odpowiedz

6

Propozycje (nigdy nie próbowałem to sam):

  1. Tworzenie ImageView tak duży, jak chcesz niż umieścić obraz na nim bez skalowania

    ImageView.setScaleType(ImageView.ScaleType.CENTER). 
    
  2. Brute podejście życie: utwórz nowy większy png, który ma oryginalny obraz wyśrodkowany, a reszta jest przezroczysta.

+0

Zakończył się metodą brute-force. – user291701

+0

ImageView.setScaleType (ImageView.ScaleType.CENTER) nie działa dla mnie. W każdym razie wszystko to zmieniło. – thekindofme

+0

@thekindofme Dodanie padding spowoduje przeskalowanie obrazu, jeśli używasz android: background zamiast android: src na ImageView. – JP2014

24

Użyj wypełnienia. marginesy układu są używane, jeśli chcesz wstawić spację poza granicę widoku.

równego wyściółka ze wszystkich stron

<ImageView 
     android:padding="20dip" /> 

lub ustawić margines z każdej strony

<ImageView 
    android:paddingLeft="10dip" 
    android:paddingRight="15dip" 
    android:paddingTop="23dip" 
    android:paddingBottom="12dip" /> 

nadzieję, że pomoże!

+0

wyściółka działa najlepiej w tej sytuacji! – deathemperor

+0

Właśnie wypróbowałem wyściełanie i rzeczywiście działa – sports

+0

Ta odpowiedź powinna być oznaczona jako poprawna! – GeertVc

6

Zamiast zmiany rozmiaru obrazu (odpowiedź Petera Knego'S) lub zwiększenie dopełnienie (Odpowiedź Saimon'S) Proponuję ustawić minWidth i minHeight atrybuty w połączeniu z scaleType="center":

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:minWidth="40dp" 
    android:minHeight="40dp" 
    android:scaleType="center" 
    android:src="@drawable/your_image" /> 

To daje pewność, że małe obrazy mają w najmniejszy rozmiar 40x40dp, gdy obraz nie jest przeskalowany, jeśli jest mniejszy. Jeśli pewnego dnia obraz zostanie zastąpiony innym obrazem większym niż minWidth i minHeight, nie będzie on większy niż 40x40dp, ponieważ zostanie przeskalowany w dół. Dlatego zawsze gwarantowany jest minimalny klikalny wymiar 40x40dp, a obraz zawsze jest ładnie wyświetlany.

Powiązane problemy