6

どうやらAndroidには壊れたバグView.bringToFrontがあります。

ビューをGridViewに配置していて、bringToFront()を呼び出してビューを前面に表示したい場合、GridViewの右下の位置に移動することがあります。

何か怪しげなことが起こっているので、bringToFront()を使用できません。私がそれを呼ばないとき、すべてがうまくいきます。ただし、ビューは重複しています。スケールアニメーションを使用してビューをスケールアップすると、下部と右側のビューによって部分的に隠されます。

私はbringToFrontのソースをチェックアウトしました、そしてそれはparent.bringChildToFront(...)を呼び出します

この方法です

public void bringChildToFront(View child) {
     int index = indexOfChild(child);
      if (index >= 0) {
          removeFromArray(index);
          addInArray(child, mChildrenCount);
          child.mParent = this;
      }
  }

どうやらそれ自体からビューを削除します!容赦なく!ViewGroupは非常に馬鹿げているので、シャッフルが制御する他の方法でZインデックスを管理することはできませんか?明らかに、GridViewがその子を削除してから再度追加すると、グリッドの最後に配置されます。

ハッキングに頼ることなく、他の人の上にビューを表示するために私ができることはありますか?私の頭に浮かぶことの1つは、GridViewの上に別のビューを作成することです。これは私がbringToFront()しようとしているビューの上に表示されますが、このソリューションは好きではありません。

4

5 に答える 5

3

どうやら私android:clipChildren="false"はGridViewのプロパティを逃しました。それは私の問題を解決します。

于 2010-12-16T09:42:57.493 に答える
1

Viewフォーカス可能にしてrequestFocus()を呼び出してみましたか?

于 2010-12-08T21:24:04.313 に答える
1

bringToFront()を呼び出すと、GridViewの順序が変更されます。アニメーション化するビューの画像を使用してImageViewを作成し、代わりにそれをアニメーション化してみてください。

Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas);
final ImageView imageView = new ImageView(getActivity());
imageView.setImageBitmap(bitmap);
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(view.getWidth() , view.getHeight());
imageView.setLayoutParams(params);
rootview.addView(imageView);

アニメーションリスナーをアニメーションに追加し、アニメーションの最後にあるImageViewを削除します。

于 2015-08-03T02:37:07.880 に答える
1

API 21から、次を呼び出すことができます。

view.setZ(float)
于 2015-10-13T12:45:11.477 に答える
0

21を超えるAPIをターゲットにしている場合は android:translationZ="xxx dp"、XMLに属性を追加するだけです。

カードビューなどのビューに標高を追加すると、Z軸に入ることに注意してください。また、この方法を使用してビューを前面に表示したい場合は、設定した標高よりも高くする必要があります。

例:カードビューで6 dpの標高を使用するには、フォアグラウンドにするビューの属性translationZに7dpが必要です。

于 2017-03-06T12:53:43.297 に答える