0

私は、脳のマップを表示しているソフトウェアに取り組んでいます。時間の繰り返しごとに更新されるマップがいくつかあります。これらのマップをズーム可能なテーブル レイアウトで表示したいので、クラスを使用します AwesomeTableLayout.java(基本的な tableLayout から始めます)。

public class AwesomeTableLayout extends TableLayout{

    public AwesomeTableLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public AwesomeTableLayout(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

}

各マップは、 MapView と呼ばれる SurfaceView を使用して表示されます。

public class MapView extends SurfaceView implements SurfaceHolder.Callback {

これらのマップをプログラム的に追加したい場合、ユーザーは別のマップ (入力、メモリ、フォーカスなど) を削除/追加できます。

だから私のMainActivity中で:

public class MainActivity extends Activity {

        //...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

                Resources r = getResources();
        XmlResourceParser parser = r.getXml(R.layout.activity_main);
        AttributeSet as = Xml.asAttributeSet(parser);
        Context context = getApplicationContext();

        mMapView = new MapView(context, as);
        mMapView2 = new MapView(context, as);

        AwesomeTableLayout tl = (AwesomeTableLayout) findViewById(R.id.layout);

        TableRow tr = new TableRow(this);
        tr.addView(new AddMapOrStatsView(context, 0, 0));
        tr.addView(mMapView2);
        tr.addView(mMapView);
        tr.addView(new AddMapOrStatsView(context, 0, 1));
        tr.addView(new AddMapOrStatsView(context, 0, 2));
        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        }

クラスAddMapOrStatsViewは、テーブルに新しいマップを追加するための一種の「追加」画像です (画像は Android のエイリアンです)。

public class AddMapOrStatsView extends ImageView{

    public AddMapOrStatsView(Context context,final int ligne,final int colonne) {
        super(context);
        /* image utilisée */
        setImageResource(R.drawable.ic_launcher);
        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("Un click simple sur l' AddMapOrStatsView("+ligne+","+colonne+") a été effectué !");
            }
        });
    }
}

activity_main.xml:_

<?xml version="1.0" encoding="utf-8"?>
<com.main.gui.AwesomeTableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" > <!-- 2 columns -->

<!--     <TableRow -->
<!--         android:id="@+id/tableRow1" -->
<!--         android:layout_width="wrap_content" -->
<!--         android:layout_height="wrap_content" -->
<!--         android:padding="5dip" > -->

<!--         <TextView -->
<!--             android:id="@+id/textView1" -->
<!--             android:text="Column 1" -->
<!--             android:textAppearance="?android:attr/textAppearanceLarge" /> -->

<!--         <Button -->
<!--             android:id="@+id/button1" -->
<!--             android:text="Column 2" /> -->

<!--         <Button -->
<!--             android:id="@+id/buttonxx" -->
<!--             android:text="Column 3" /> -->
<!--     </TableRow> -->

</com.main.gui.AwesomeTableLayout>

さて、ここで問題。前のコードでアプリケーションを実行すると、次のように表示されます。

コード募集

ご覧のとおり、AddMapOrStatView の 3 つのビューしか表示されません。

このようにxmlのコメントを外すと:

<?xml version="1.0" encoding="utf-8"?>
<com.main.gui.AwesomeTableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" > <!-- 2 columns -->

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dip" >

        <TextView
            android:id="@+id/textView1"
            android:text="Column 1"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <Button
            android:id="@+id/button1"
            android:text="Column 2" />

<!--         <Button -->
<!--             android:id="@+id/buttonxx" -->
<!--             android:text="Column 3" /> -->
    </TableRow>

</com.main.gui.AwesomeTableLayout>

私はこれを見る :

ええ

再生をクリックすると (つまり、2 つの surfaceView を描画します)、次のように表示されます。

zzzz

最後に、次のように xml のコメントを外します。

<?xml version="1.0" encoding="utf-8"?>
<com.main.gui.AwesomeTableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" > <!-- 2 columns -->

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dip" >

        <TextView
            android:id="@+id/textView1"
            android:text="Column 1"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <Button
            android:id="@+id/button1"
            android:text="Column 2" />

        <Button
            android:id="@+id/buttonxx"
            android:text="Column 3" />
    </TableRow>

</com.main.gui.AwesomeTableLayout>

私はこれを見る :

ここに画像の説明を入力

次に、2 つのサーフェス ビューを描画すると、次のように表示されます。

ここに画像の説明を入力

問題は、アンドロイドの 3 枚の写真と 2 つの地図を見たいだけです。tableLayout の行に他のものを追加して、表面ビューを表示する必要があるのはなぜですか?

読んでくれてありがとう。

4

1 に答える 1

0

次のように、surfaceViewのホルダーのサイズを修正しました:

holder.setFixedSize(60, 60);

それは今働いています!

于 2013-08-20T10:31:17.407 に答える