Usar vista personalizada en diseño XML

Tengo una vista personalizada:

public class Loading extends View {

    private long movieStart;
    private Movie movie;

    public Loading(Context context, InputStream inputStream) {
        super(context);
        movie = Movie.decodeStream(inputStream);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
        super.onDraw(canvas);
        final long now = SystemClock.uptimeMillis();
        if(movieStart == 0)
            movieStart = now;
        final int relTime = (int)((now - movieStart) % movie.duration());
        movie.setTime(relTime);
        movie.draw(canvas, 0, 0);
        this.invalidate();
    }

}

¿Cómo puedo usar esta vista en el diseño XML? ¿Cómo puedo pasar los parámetros (Contexto, InputStream) en el diseño XML?

preguntado el 29 de junio de 12 a las 19:06

3 Respuestas

How can I use this view in XML layout?

..

 <pacakge_of_class.Loading 
            android:id="@+id/y_view1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

http://developer.android.com/guide/topics/ui/custom-components.html

Hay una forma del constructor que se llama cuando la vista se crea a partir del código y una form that is called when the view is inflated from a layout file. The second form should parse and apply any attributes defined in the layout file.

How can I pass the parameters 

https://stackoverflow.com/a/4495745/804447

Error al hacer referencia a una vista de clase interna en layout / main.xml

<view class="Your_package.MainClass$Loading" />

contestado el 23 de mayo de 17 a las 13:05

La respuesta corta es que no puedes hacer eso directamente.

La respuesta larga es que puedes hacerlo indirectamente.

Agregue la vista al XML por su nombre completo (como han mencionado otros), luego:

Lo que debe hacer es implementar los constructores normales de View. Defina un atributo personalizado que declare el recurso que se usará para crear InputStream en su constructor. El sistema de visualización le dará el contexto automáticamente, luego deberá abrir InputStream según el valor del atributo proporcionado.

Respondido el 29 de junio de 12 a las 19:06

Puede usar una vista personalizada en un diseño XML como este:

<com.your.package.Loading 
    android:id="@+id/y_view1"
    ... />

Pero no puede usar su propio constructor, debe usar los constructores como se muestra en esta respuesta.

Por lo tanto, debe acceder a su Vista de carga por código y configurar el InputStream manualmente:

Loading yourView = (Loading) findViewById(R.id.yourLoadingView);
yourView.setInputStream();

donde tienes este método setter en tu Loading clase:

public void setInputStream(InputStream inputStream){
    movie = Movie.decodeStream(inputStream);
}

contestado el 23 de mayo de 17 a las 12:05

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