2

Android アプリでカスタマイズされたマーカー「バブル」を使用しようとしています。これを行うために、View を返してデータを入力する InfoWindowAdapter を作成しました。

ただし、何らかの理由で、そのビュー (またはその中にあるもの) にアニメーションを適用できないようです。特定のアニメーションの方法でポップしたいのですが、おそらく何かが欠けています。

これは私がこれまでに試したことです:

map.setInfoWindowAdapter(new InfoWindowAdapter() {
    private final View contents = getLayoutInflater().inflate(R.layout.marker_layout, null);

    public View getInfoWindow(Marker marker) {
        TranslateAnimation animator = new TranslateAnimation(0.0f, 0.0f, 0.0f, 100.0f);

        animator.setDuration(2000);
        animator.setInterpolator(new AccelerateInterpolator());
        animator.setFillAfter(true);

        contents.findViewById(R.id.entity_name).clearAnimation();
        contents.findViewById(R.id.entity_name).startAnimation(animator);

        ((TextView) contents.findViewById(R.id.entity_name)).setText(marker.getTitle());
        return contents;
    }
/* ... */

ビューは正常に作成および設定されますが、親アニメーションはありません。同じアニメーションをレイアウトの別の要素に適用すると問題なく動作するので、これは Google マップが情報ウィンドウを使用する方法に関するものだと思い始めています。

4

2 に答える 2

9

にアニメーションを適用することはできませんInfoWindow。単純な理由が 1 つあります。に表示されるのInfoWindowは、定義したレイアウトではなく、そこから描画された画像です。つまり、これを操作できますInfoWindow

Google のドキュメントから:

注:描画される情報ウィンドウはライブ ビューではありません。View.draw(Canvas)ビューは、返されるときに( を使用して) イメージとしてレンダリングされます。これは、ビューに対するその後の変更がマップ上の情報ウィンドウに反映されないことを意味します。後で情報ウィンドウを更新するには (たとえば、画像が読み込まれた後)、 を呼び出しますshowInfoWindow()。さらに、情報ウィンドウは、タッチやジェスチャ イベントなど、通常のビューに典型的な対話性を考慮しません。ただし、以下のセクションで説明するように、情報ウィンドウ全体で一般的なクリック イベントを聞くことができます。

于 2013-04-22T10:52:22.027 に答える
3

Handlerと を使用して、この制限を回避することができMarker.showInfoWindow()ます。

短期間、メッセージをハンドラーに送信し、showInfoWindow を呼び出し、getInfoWindow で毎回異なるビュー (ケースでは異なる下マージン) を作成します。

これは少し難しいかもしれません。この 2 秒間にユーザーが情報ウィンドウを閉じたときに「アニメーション」を続行しないようにするには、開いている情報ウィンドウを追跡する必要があります。

于 2013-04-22T12:55:26.883 に答える