1

私はカスタムビューを持っています:

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();
    }

}

このビューを XML レイアウトで使用するにはどうすればよいですか? XML レイアウトでパラメーター (Context、InputStream) を渡すにはどうすればよいですか?

4

3 に答える 3

0
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

ビューがコードから作成されたときに呼び出されるコンストラクターの形式と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

layout/main.xml で内部クラス View を参照中にエラーが発生しました

<view class="Your_package.MainClass$Loading" />
于 2012-06-29T18:52:11.173 に答える
0

短い答えは、直接それを行うことはできないということです。

長い答えは、間接的にそれを行うことができるということです。

ビューを完全修飾名で XML に追加し (他の人が言及しているように)、次のようにします。

あなたがする必要があるのは、View から通常のコンストラクターを実装することです。コンストラクターで InputStream を作成するために使用するリソースを宣言するカスタム属性を定義します。ビュー システムはコンテキストを自動的に提供します。提供された属性値に基づいて InputStream を開く必要があります。

于 2012-06-29T18:55:20.363 に答える
0

次のように、XML レイアウトでカスタム ビューを使用できます。

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

ただし、独自のコンストラクターを使用することはできません。この回答に示されているようにコンストラクターを使用する必要があります。

そのため、コードで Loading View にアクセスし、InputStream を手動で設定する必要があります。

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

Loadingクラスにこのセッターメソッドがある場所:

public void setInputStream(InputStream inputStream){
    movie = Movie.decodeStream(inputStream);
}
于 2012-06-29T19:02:21.093 に答える