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, 100, 100);
        this.invalidate();
    }

}

アクティビティonCreateメソッド:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    InputStream inputStream = null;
    try {
       inputStream = getAssets().open("loading.gif");
    } catch(IOException e) {
      e.printStackTrace();
    }
    Loading loading = new Loading(this, inputStream);
    setContentView(loading);
}

デバイスレイアウトの中央にビューを設定したい。XMLレイアウトと同様に、android:layout_centerHorizo​​ntal="true"を設定できます。どうすればいいですか?

4

1 に答える 1

0

ビューのLayoutParamsを設定する必要があります。私がすることは、カスタムビューをコンテナ(FrameLayoutなど)に配置することです。次に、ビューを作成し、重力をCENTER_HORIZONTALに設定してビューのFrameLayout.LayoutParamsを設定します。こんな感じになります

FrameLayout frame = new FrameLayout(context);

FrameLayout.LayoutParams flParams = new FrameLayout.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 
    ViewGroup.LayoutParams.WRAP_CONTENT, 
    Gravity.CENTER_HORIZONTAL
);

Loading loading = new Loading(this, inputStream);
loading.setLayoutParams(flParams);
frame.addView(loading);
setContentView(frame);

希望どおりに表示されるようにFrameLayoutを構成することをお勧めします。

これが私が使用するLayoutParamsコンストラクターのドキュメントです:http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html#FrameLayout.LayoutParams%28int,%20int,%20int%29

ViewParentを拡張する各ビューには独自のLayoutParamsクラスがあることを覚えておくことが重要です。たとえば、FrameLayoutの代わりにLinearLayoutを使用する場合は、LinearLayout.LayoutParamsを使用します。さまざまなタイプのParamにはさまざまなコンストラクターオプションがあるため、それを試して、自分に最適なものを見つけることができます。幸運を。

于 2012-06-29T16:56:55.363 に答える