2

ビューを にレンダリングしていますBitmap。画面に収まるかどうかに基づいて、上部または下部にポインターが付いたバルーンが必要です。そのRelativeLayoutためには、ポインターを部分的にバルーンの上に配置する必要があるため、を使用します。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >

    <LinearLayout android:id="@+id/balloon_body"
        android:layout_width="@dimen/pins_details_balloon_width"
        android:layout_height="wrap_content"
        android:layout_marginTop="-1dp"
        android:layout_marginBottom="-1dp"
        android:layout_below="@+id/pointer_top"
        android:orientation="vertical"
        >

        <TextView android:id="@android:id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            />

        <TextView android:id="@android:id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            />

    </LinearLayout>

    <ImageView android:id="@id/pointer_top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <ImageView android:id="@+id/pointer_bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/balloon_body"
        />

</RelativeLayout>

このビューを膨らませてから、測定してレイアウトしたいので、ビットマップにレンダリングできます。

view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
//view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
//view.measure(View.MeasureSpec.makeMeasureSpec(3000, View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(3000, View.MeasureSpec.AT_MOST));
view.layout(0, 0, s_View.getMeasuredWidth(), s_View.getMeasuredHeight());

このコードは、view.measure(...)でクラッシュし、Circular 依存関係は RelativeLayoutエラーに存在できません。別のLayoutParams (setLayoutParams(...) なしでは、メジャー (...)は null ポインター例外でクラッシュします)、別のView.MeasureSpec -s を試しましたが、成功しませんでした。最後の ImageView でandroid:layout_below="@id/balloon_body"を削除すると機能しますが、下部のポインターが上部にあります。

これらのポインターをバルーンの本体の上に配置する必要があるため、LinearLayout を使用することはできません。LinearLayout を使用すると、上部のポインターはその下になります。問題はどこにあり、どうすれば目的を達成できますか?

4

4 に答える 4

2

この問題は、レイアウト パラメータに循環参照があるために発生します。

たとえば、ビュー B がビュー A の layout_below である場合、ビュー A はビュー B をその下、alignRight などで参照できなくなります。これは、複数のビュー間でも存在する可能性があります。A は B を参照し、C を参照します。そのシナリオでは、C は A を参照できません。循環依存のためです。

詳細については、「循環依存関係は RelativeLayout、Android に存在できませんか?」を参照してください。

それが役に立てば幸い!

于 2016-11-29T00:46:49.380 に答える
0

これを試して。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>

 <ImageView android:id="@id/pointer_top"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
<LinearLayout android:id="@+id/balloon_body"
    android:layout_width="@dimen/pins_details_balloon_width"
    android:layout_height="wrap_content"
    android:layout_marginTop="-1dp"
    android:layout_marginBottom="-1dp"
    android:layout_below="@+id/pointer_top"
    android:orientation="vertical"
    >

    <TextView android:id="@android:id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        />

    <TextView android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        />

</LinearLayout>
<ImageView android:id="@+id/pointer_bottom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/balloon_body"
    />

于 2013-01-04T12:41:16.230 に答える