0

私が実行しようとしているアイデアは、ギターのフレットボードを印刷し、その上にいくつかの音符を指すための四角形を印刷することです. 写真は百聞は一見に如かずということで、これはAndroid 2.3.3 で実行されているものです。

「どうして私たちの助けが必要なの!?」私はAndroid 4.0.3で実行しようとしたため、この別のものが結果でした。正方形をできるだけ大きくしようとしていることに気付きました (1 つの正方形のみを残しました)。そのため、すべてのドットに dot[counter].setScaleType(ScaleType.CENTER) を追加し、これを取得しました (http://i.imgur. com/4yOJD.png 申し訳ありませんが、別のハイパーリンクを投稿することはできません)、2.3.3 は最初のキャプチャと同じままでした。これにより、2つのバージョンで異なるため、すべてのドットに setPadding() を普遍的に作成できなくなります。異なるAVDで実行されているだけで、完全に同じコードであることに注意する必要があります(物理デバイスでも同じ結果を試しました)。

また、コードと xml でレイアウトの重力を変更しようとしましたが、効果はありませんでした。

状況に関連すると思われるものをコピーしていますが、それ以外はお気軽にお尋ねください.

これは私の簡単なレイアウトです:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="@string/add"
    android:textAppearance="?android:attr/textAppearanceLarge" />


<FrameLayout
    android:id="@+id/layoutFrets"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" >

    <ImageView
        android:id="@+id/imageView1"
        android:scaleType="fitXY"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/fretboard" />

</FrameLayout>

ドットを生成して出力するアクティビティのコードは次のとおりです。

ImageView を作成するには:

for (int i = 0; i<notesN; i++)
        dot[i] = new ImageView(this);

そして、それらを印刷するには、ドットを印刷するためのレイアウトのサイズが必要なため、これを行う必要がありました。

fl.post(new Runnable(){
        public void run() {
            int counter = 0;

            //Pointless constants go here to print the dots in their place              

            for (int strings = 0; strings < fretboard.NSTRINGS; strings++){
                for (int frets = 0; frets < fretboard.NFRETS; frets++){

                    if (fretboard.isOccupied(strings, frets)){
                        dot[counter].setScaleType(ScaleType.CENTER);
                        dot[counter].setImageResource(R.drawable.dot);  

                        //Quite a messy code... calculates the positions based
                        //on the constants above
                        dot[counter].setPadding(
                                (int) (-fl.getWidth() + 2 * fl.getWidth()
                                        * fretDistance[frets]),
                                (int) (fl.getHeight() * (stringDistance[strings])),
                                0, 0);

                        fl.addView(dot[counter]);
                        counter++;
                    }
                }
            }

        }

    });

それは私があなたに与えた最後のキャプチャに対処します.

また、post() メソッドの外側で ImageViews を初期化しようとしましたが、同じ結果になりました。

私は何が間違っているのですか?事前にどうもありがとうございました :)

4

1 に答える 1

0

レイアウトのタイプを変更するというアイデアで目が覚めました...そしてうまくいきました。

相対レイアウトの FrameLayout を変更すると、すべてが期待どおりに機能しました。

誰かがなぜそれが起こったのか説明できる場合に備えて、私はまだこのスレッドを監視します.

于 2012-03-18T09:39:20.093 に答える