Mam dwa obrazy, których przezroczysty obszar zachodzi na siebie. Po kliknięciu jednego obrazu zostanie wywołany onclicklistener innego obrazu. Czy mimo to można zmniejszyć klikalny obszar ImageView.Android: jak zmniejszyć klikalny obszar widoku?
Odpowiedz
można utworzyć TouchDelegate
:
final View parent = (View) findViewById(R.id.touch_delegate_root);
parent.post(new Runnable() {
// Post in the parent's message queue to make sure the parent
// lays out its children before we call getHitRect()
public void run() {
final Rect rect = new Rect();
Button delegate = YourActivityClass.this.mButton;
delegate.getHitRect(rect);
rect.top -= 20;
rect.bottom += 12; // etc
parent.setTouchDelegate(new TouchDelegate(rect , delegate));
}
});
skieruję od here
Można go rozwiązać za pomocą tylko XML. Po prostu umieść obraz w ramce i umieść inny przezroczysty widok, który możesz podłączyć do zdarzeń kliknięcia na górze. Dostosuj rozmiar i pozycję z parametrów układu:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView android:id="your_view"
android:clickable="false"
<!-- your other attributes -->
<!-- ... -->
/>
<ImageView android:id="the_clickable_view"
android:src="@null"
<!-- set desired size of clickable area -->
<!-- align it inside a frame using:
android:gravity and android:margins -->
/>
</FrameLayout>
Ponieważ pożądany obszar nieklikalny jest "przezroczysty" (zakładam, że oznacza to, że nie znajduje się on w obszarze losowania), możesz nawet rzucić dodany widok i po prostu dodając FrameLayout, w którym go rozwiązałeś - użyj oryginalnych atrybutów układu na FrameLayout zamiast ImageView i spraw, aby ImageView był tylko tak duży, na jaki chcesz go klikać. –
Nie używaj OnClickListener, ale OnTouchListener i obsługiwać obszar kliknij samemu.
Na przykład poprzez skalowanie prostokąta dotykowego i przetłumaczenie go na środek widoku. Można również użyć przesunięć promienia lub ręcznego.
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final Rect rect = new Rect();
v.getHitRect(rect);
float scale = 0.5f;
final float x = event.getX();
final float y = event.getY();
final float minX = v.getWidth() * 0.5f * (1.0f - scale);
final float maxX = v.getWidth() * 0.5f * (1.0f + scale);
final float minY = v.getHeight() * 0.5f * (1.0f - scale);
final float maxY = v.getHeight() * 0.5f * (1.0f + scale);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (x > minX && x < maxX && y > minY && y < maxY) {
Log.d("TOUCH", String.valueOf(x) + " " + String.valueOf(y));
}
break;
}
return true;
}
});
- 1. Rozwiń klikalny obszar ImageView za pomocą wypełnienia?
- 2. jak zrobić pełny wiersz klikalny w widoku listy android
- 3. JavaScript i SVG: jak zwiększyć obszar klikalny dla zdarzenia onClick?
- 4. Jak zwiększyć obszar klikalny przycisku znacznika <a>?
- 5. Jak zmniejszyć szybkość przewijania widoku UIScroll
- 6. Jak listFooter nie klikalny
- 7. android: przycisk widoku obrazu wewnątrz
- 8. Jak dodać klikalny przycisk na komórce tabeli?
- 9. Jak zmniejszyć mapę AppEngine, aby zmniejszyć skalę?
- 10. CSS - Utwórz div "klikalny"
- 11. Android - Jak narysować na widoku
- 12. Ustaw tytuł ActionBar klikalny
- 13. Jak zmniejszyć mobilność strony mobilnej?
- 14. Jak zmniejszyć czas rozruchu w osadzonym systemie operacyjnym Android?
- 15. Jak zmniejszyć odstępy między wierszami tekstu w układzie Android?
- 16. Jak zmniejszyć rozmiar dysku Android na dysku twardym
- 17. Jak zmniejszyć wewnętrzne wypełnienie wokół tekstu w obiekcie przycisku Android?
- 18. Jak ustawić klikalny wiersz lub komórkę?
- 19. jak sprawić, aby mój obraz był klikalny
- 20. Jak zmniejszyć trudność Recaptcha?
- 21. Jak zmniejszyć złożoność cykliczności?
- 22. Jak zmniejszyć prędkość Internetu
- 23. Android dostaje typ widoku
- 24. Jak przekazać odwołanie widoku do niestandardowego widoku systemu Android?
- 25. Obszar kliknięcie wrażliwych nie zmienia się po animacji i interaktywnych widzenia w Android
- 26. Making klikalny JButton wewnątrz JTable
- 27. Jak wypełnić obszar wykresu kolorem
- 28. Jak przenieść obszar roboczy NetBeans?
- 29. Jak przyciąć wewnętrzny obszar konturu?
- 30. Jak powiększyć obszar uderzenia UIGestureRecognizer?
Dzięki tej metodzie mogłem zwiększyć obszar dotykowy, ale nie byłem w stanie zmniejszyć obszaru. – Amit