0

ギャラクシータブに2つの相対的なレイアウトを含むフルスクリーンビューフリッパーがあり、それぞれが5〜10の画像ビューを表示しています。

ビューフリッパービューの1つをスライドさせて、もう1つをスライドさせようとすると、問題が発生します。「アニメーション」は何もせず、ただ切り替わるだけです。

ビューフリッパーの子のそれぞれで1つを除くすべての画像ビューを削除すると、アニメーションは正常になります。

どういうわけか、アニメーションに画像の混合バージョンを使用するように強制できますか、それとも相対的なレイアウトコンテナがパフォーマンスの問題を引き起こしていますか?

フリッパーアニメーションが発生した時点では何も起きていないはずなので、問題を理解できません。

ありがとう

編集:問題のあるコードのいくつか:おそらくこれは、パフォーマンスの問題を引き起こしている領域を示している可能性がありますか?

onClickには、ビューを逆方向に切り替えたり、順方向に切り替えたりするために使用される2つのメソッド呼び出しがあります。ビューは、フリッパーに追加されて切り替えられる直前に「生成」されます。

だから、戻るボタンをクリックすると(例えば)私は(とりわけ)....

nextView = new RelativeLayout(this);
makeAView(selectedViewObjects, viewHolder2);
switchViewNow(-1);
currentView = nextView;
...


private void makeAView(ViewObjects vObjects, RelativeLayout nextView)
{
  for(Object obj :  vObjects.viewObjects)
  {
   if(obj instanceof Image)
  {
    addImageView(nextView, obj);
  {
  else
  {
   if(obj instanceof Anim)
  {
    addAnimView(nextView, obj);
  }
}

ここで、Imageは静止画像を表示するためのカスタムビュー実装であり、AnimはAnimationDrawable(マルチフレーム画像サイクル)を表示するためのカスタムビュー実装です。

次に、切り替え方法があります。

private void switchViewNow(int direction)
    {
        if(direction == -1)
        {
            viewFrame.setInAnimation(AnimClass.inFromLeftAnimation(null));
            viewFrame.setOutAnimation(AnimClass.outToRightAnimation(null));
            viewFrame.showNext();
        }
        else
        if(direction == 1)
        {
            viewFrame.setInAnimation(AnimClass.inFromRightAnimation(null));
            viewFrame.setOutAnimation(AnimClass.outToLeftAnimation(null));
            viewFrame.showNext();
        }
    }
4

1 に答える 1

1

私は間違っているかもしれませんが、混乱した方法で nextView をオーバーロードしているように見えます。

これは makeAView の外部で定義されていますが、makeAView は nextView という名前のパラメーターを想定しています。

viewHolder2 を nextView としてこの関数に渡しています。

つまり、makeAView は「グローバルな」nextView を変更せず、viewHolder2 を変更します。

しかし、それを使用して currentView を割り当てるため、「グローバル」な nextView が変更されたと想定しているようです。

この 2 つのバージョンの nextView に一意の名前を割り当てることから始めるのがよいと思います。

あなたはまだ解決策を探しているのでしょうか? この投稿はかなり古く、無視されています。

于 2012-02-10T21:13:49.203 に答える