2011-10-22 3 views
0

私はプログラミング割り当て用の小さなゲームを作成しています。私は背景を適切に設定する方法を見つけようとしていますが、わかりません。キャンバスでレイアウトを使用するか、キャンバスにバックグラウンド描画可能な背景色を指定する

私はmain.xmlに2つの線形レイアウトを持っています。 1つは背景色を持ち、もう1つのレイアウトは背景画像(透明なPNG)を持っています。私はアプリを起動したときにそれは罰金を示しています。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#aacceeff" 
    > 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/background" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    > 

</LinearLayout> 

</LinearLayout> 

はしかし、私は今、アニメーションを追加する必要があります。そのために、画像を読み込んでアニメーション化するViewオブジェクトを作成しました。しかし、今度は、主なアクティビティからこの新しいビュー・オブジェクトのインスタンスへのコンテンツ・ビューを設定する必要があります。

BitmapDrawable tiledBackground = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.background)); 
LinearLayout backgroundLayout = (LinearLayout) findViewById(R.id.background); 
tiledBackground.setTileModeX(Shader.TileMode.REPEAT); 
backgroundLayout.setBackgroundDrawable(tiledBackground); //backgroundLayout is null 

私はビューは、もはやmain.xmlで指定の見解であるので、これはありません図:私はそれを行うときにid backgroundでリニアレイアウトを見つけることができないので、私は、nullポインタ例外を取得します。私はこのコードを削除すると、コードは正常に実行されますが、私は黒い背景を取得します。この特定のスニペットをカスタムビューに移動して背景をイメージに設定しようとしましたが、黒い背景のイメージが表示されました。私が実際に望んでいるのは、背景色が透けて見える透明な画像です。

私は私が把握しようとしている何推測は、私がmain.xmlで定義したレイアウトを使用してカスタムビューを伝える、または背景色の背景描画可能を指定する方法を把握する方法でありますカスタムビュー。

答えて

1

を使用することができる次の子を表示するには:

super(context); 

BitmapDrawable tiledBackground = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.background)); 
tiledBackground.setTileModeX(Shader.TileMode.REPEAT); 

//I determined the PorterDuff.Mode value mainly through trial and error 
tiledBackground.setColorFilter(0xaacceeff, PorterDuff.Mode.DARKEN); 

this.setBackgroundDrawable(tiledBackground) 
0

findViewByIdメソッドを使用すると、setContentViewメソッドで指定したlayout.xmlからレイアウトまたはビューが検索されます。

したがって、setContentViewを呼び出して別のxmlファイルをレイアウトとして設定すると、以前のレイアウトからビューを見つけることができなくなります。

理想的なケースでは、setContentViewはアクティビティに対して1回だけ呼び出されます。新しいアクティビティは異なる画面に呼び出されます。しかし、ViewFlipperクラスも使用すると、両方のレイアウトを子として追加できます。一度に1人の子供しか表示されません。私は、カラーフィルタを使用することによってこの問題を解決することができたあなたは

viewflipper.setDisplayChild(1); 
+0

右を、私はその部分を考え出しました。私はそれを回避する方法を理解しようとしています。 –

+0

私の回答を代替案で更新しました。 – blessenm

+0

これで私の問題がどのように修正されるのか分かりません。私は基本的に私が既に定義したレイアウトと、私が持っているカスタムビューを使用しようとしています。だから私はメインレイアウトの背景をカスタムビューで表示したい。 –

関連する問題