Vista no intratable

¿Cómo puedo hacer que una vista no sea intratable? Tengo dos vistas de lienzo apiladas una sobre otra en un diseño de marco. Ambos lienzos ocupan toda el área de la pantalla y ambos son transparentes. Quiero mostrar algunos PNG en el lienzo superior y dejar que el usuario dibuje en el lienzo inferior.

El problema es que cuando el usuario toca la pantalla, el lienzo superior toma la entrada táctil y, como no hace nada (dibujar en el lienzo inferior), no sucede nada.

Quiero que el lienzo superior actúe como una vista superpuesta sin interacciones ni eventos asignados, todos estos deben ser consumidos por la vista inferior. Si configuro la superposición superior como invisible, puedo dibujar en el lienzo inferior (ya que ahora el lienzo inferior recibe todas las entradas).

Además, el lienzo no es un lienzo estándar, sino uno personalizado. Se deriva directamente de la clase View. Pero creo que una vista derivada no causaría problemas. Simplemente no sé cómo proceder.

Intenté usar onTouch() en el lienzo superior y llamar a onTouch() en el lienzo inferior, no funcionó. Estoy probando otras cosas como dispatchTouch() en 2 botones, pero nada me parece seguro. La ayuda sería muy apreciada.

Editar: código de diseño XML agregado

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.samsung.sdraw.CanvasView 
        android:id="@+id/canvas1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="cnvs1Click"
        android:text="Canvas1" />

    <com.samsung.sdraw.CanvasView 
        android:id="@+id/canvas2" 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Canvas2" 
        android:onClick="cnvs2Click"/>
</FrameLayout>

Pero sigo pensando que el problema se resolvería con View(s). El lienzo es de S pen SDK

preguntado el 03 de mayo de 12 a las 10:05

2 Respuestas

Este podría ser un caso especial, no he jugado para ver si esto es cierto, pero normalmente en sus eventos onTouch, etc., simplemente devuelve falso si no ha manejado el evento, y el evento aparece a través de los eventos táctiles de cada vista hasta que algo devuelve verdadero, lo que indica que se trata de un golpe controlado.

si hace que su vista (la capa superior) simplemente devuelva falso desde su onTouch, las vistas inferiores onTouch deberían recibir el evento.

contestado el 03 de mayo de 12 a las 10:05

¿Podría ayudar a elaborar ese, sobre cómo usarlo? Me refiero a que cuando agrego onTouchEvent() eclipse, el método autogenerado devuelve falso, pero aun así puedo dibujar en el lienzo superior, que no es lo que quiero. - Jefe Maestro

Si edita su pregunta inicial para dar un código de ejemplo y un diseño de ejemplo, entonces estaré feliz de jugar e intentar ayudar: rspython

Seguramente puedo publicar un código de ejemplo. El lienzo es en realidad un lienzo personalizado como expliqué en la pregunta. En realidad, es un lienzo especial suministrado con el SDK del lápiz Samsung Galaxy S. Necesitas tener el sdk también. es un SDK pequeño S pen SDK enlace . - Jefe Maestro

Ok, SDK personalizado, no hay problema, podemos trabajar con eso. ¿Has intentado, en el lienzo que NO quieres tocar, llamar a setDrawable (falso)? - rspython

Bien, ¿entonces el lienzo superior tiene que ser este lienzo de lápiz personalizado? solo quieres mostrar un png en él, ¿verdad? no está haciendo nada más con él, o quiere que responda a algo, entonces le sugiero que deje de usar este lienzo personalizado y simplemente use uno normal de Android. - rspython

intente en el XML para agregar a la vista raíz

android:focusable="false"
android:focusableInTouchMode="false"

contestado el 03 de mayo de 12 a las 10:05

¿Quiere agregar estos valores a frameLayout (que contiene estas vistas de lienzo)? - Jefe Maestro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.