В Android, я могу добавить дочерние виды в ImageView? - PullRequest
2 голосов
/ 05 сентября 2011

У меня есть макет, который содержит ScrollView, который содержит различные компоненты, включая ImageView.Я обнаружил, что могу добавить TouchListener к ImageView, и значения x, y, которые я получаю для события, смещены от угла ImageView (включая отступы).Таким образом, я могу легко обрабатывать сенсорные события, не беспокоясь о состоянии ScrollView.

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

В частности, на изображении есть различные поля, которые я хотел бы выделить, когда они касаются.Я могу добавить представление к действию, но мне нужно было бы принять во внимание состояние ScrollView, чтобы все отображалось в правильном месте.

Каков наилучший способ приблизиться к этому?Могу ли я получить новую версию ImageView, перегрузить метод рисования и как-нибудь использовать его?(не уверен, как бы я указал это в xml, мне, вероятно, нужно было бы установить его в onCreate действия)

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

Вы должны иметь возможность переопределить метод onDraw в ImageView, как вы предлагали, и рисовать вещи поверх ImageView. Метод onDraw дает вам холст, на котором вы можете рисовать. В XML вы можете просто использовать имя нового класса, который вы создали, вместо «ImageView» (если вы не хотите добавлять параметры в дополнение к тем, которые предлагает ImageView, это должно быть довольно просто).

<your.new.awesome.class.with.the.full.namespace
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/awesome_image_view"
    />

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

Кажется, вам удобнее иметь отдельный вид, над которым вы могли бы работать. Вы можете сделать это, инкапсулировав ImageView с помощью FrameLayout, а затем добавив другой вид любого вида в качестве родственного элемента этого ImageView. Этот вид будет нарисован поверх ImageView, если он был упомянут в FrameLayout после ImageView. Это решение может быть не самым эффективным, но оно может помочь вам начать работу. Переопределение метода onDraw в ImageView, безусловно, будет лучшим вариантом.

1 голос
/ 05 сентября 2011

Вы можете сделать относительное наложение или что-то с фоном в качестве желаемого изображения вместо того, чтобы иметь просто просмотр изображения. тогда вы можете иметь дочерние представления в этом относительном расположении.

...