問題タブ [viewgroup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
612 参照

android - ビューをスクロールするときのちらつきの問題

Marc Reicheltの作業に基づいたRealViewSwitcherを、ListAdapterでバックアップされたものに変換しようとしています。一度に1つずつ表示される、複数のビューを含む、水平方向にスクロール可能なViewGroup。

私の現在のソリューションでは、一度に最大3つのビューをViewGroupに追加します。1つ(中央)が表示され、2つのバッファリングされたビューが両側に1つずつあります。ユーザーが右にスクロールすると、一番左のビューが削除され、新しいビューが右に追加されます。ViewGroupを左右両方にスクロールできるようにするには、常に中央のビューに焦点を合わせる必要があります。そのため、ビューを切り替えるときは、ビューを正しく配置し、中央のビューにフォーカスを設定します。このアプローチの問題は、ビューが配置されたときにちらつき効果が発生することです。私が描いた絵で問題を説明しましょう: 問題のシナリオ

A、B、Cは私のViewGroupの3つの異なるビューです(ViewGroupをバックアップするListAdapterにはさらに多くの要素が含まれていますが、一度に読み込まれるのは3つだけです)。大きい方の長方形は、現在フォーカスがある場所を表しています。左にスクロールし、(3)で、一番左のビューである目的地にスナップします。次に、ビューを再配置します。つまり、左側に新しいビューXを追加し、右側にビューCを削除して、Aを中央に配置します。最後に、最初からスクロールした中央のビュー(A)を中心に配置します。

したがって、ビューの最後の再配置を実行し、中央のAを中心にすると、以前は中央にあったビュー(この場合はB)のコンテンツが数ミリ秒点滅し、予期しないちらつき効果が発生します。 。どうすればそれを回避できるかについてのアイデアはありますか?

0 投票する
2 に答える
8600 参照

android - サイズ変更後にカスタム ViewGroup 内のビューがレンダリングされない

私は困惑している問題に遭遇しており、誰かが私にいくつかの指針を与えてくれることを望んでいました.

カスタム ViewGroup (実際には RelativeLayout を含む FrameLayout) を使用してイベント カレンダーをレンダリングするアプリケーションに取り組んでいます。カレンダー内のイベントは、イベントの期間とそれを含むビューのサイズに応じたサイズのビューとして表されます。

含まれている FrameLayout のサイズが変更されたときに発生する問題が発生しています。現在の実装では、イベントを表すすべてのビューを削除し、新しいビューを追加して、FrameLayout の現在のサイズに基づいてサイズを計算しようとします。この作業は、FrameLayout でオーバーライドされる View の onSizeChanged() メソッドを介してトリガーされます。

ビューのサイズが変更されると、このコードが実行され、ビューが更新されますが、実際には画面にレンダリングされるものはありません... FrameLayout に含まれるビューは単に表示されません。Hierarchyviewer ツールでビューを読み込むと、それらはビュー ツリーの一部であり、概観の本来あるべき位置に概説されますが、表示されません。(ビューは FrameLayout の最初のレンダリングで表示されることに注意してください...ビューが消えるのは、サイズ変更後にのみです。)

サイズ変更中のイベントの順序は次のようになります。

ビュー(onSizeChanged()内)をリセットした後にrequestLayout()を呼び出しても効果がないようです。ただし、requestLayout() を呼び出す前に遅延を発生させると、ビューが表示されます。スレッドを生成してスリープ状態にするか、単純に requestLayout() を呼び出すダミー ボタンを作成し、サイズ変更後にそれを押すか、または onSizeChanged() の最後に配置されたこの醜いハックでさえ、この遅延を引き起こすことができます。

このハックを使用すると、含まれているビューが表示され、イベントの順序は次のようになります。

そのため、(ビュー ツリーが変更された後に) 2 回目の測定パスを強制すると、含まれているビューが本来あるべき姿で表示されるようになります。なぜ requestLayout() の呼び出しを遅らせると、これが起こるのかは謎です。

誰かが私が間違っていることについての指針を提供できますか?

一部のコードを見ずにこれを理解するのはやや難しいことを認識しているため、私の問題を示す小さなサンプル アプリケーションを作成し、Github で利用できるようにしました。

https://github.com/MichaelSims/ViewGroupResizeTest

上記のハックは、別のブランチにコミットされています。

https://github.com/MichaelSims/ViewGroupResizeTest/tree/post-runnable-hack

追加情報を提供できる場合は、お知らせください。事前に感謝します。

0 投票する
1 に答える
239 参照

android - 非 xml コンテンツ ビューからダイアログを閉じる

contentview がカスタム ビューグループであるカスタム ダイアログ (Dialog を拡張) があります。ビューグループには edittext の子がいくつかありますが、ビューグループの dispatchDraw および onTouch メソッドでボタンの描画とクリックを自分で処理しています (できるだけ多くのビューを膨張させないようにしています)。具体的には、このビューには、ダイアログの閉じるボタンとして設定できるボタンの子がありません。viewgroup の onTouch メソッド内からダイアログを閉じたいのですが、戻るキーを押すことをシミュレートする以外に、これを行う方法がわかりません。

活動コード:

ダイアログコード:

ビューグループ コード:

私が考えることができる他の唯一のアプローチは、onCreateDialog および onPrepareDialog イベント ハンドラーをオーバーライドすることを意味する、dismissDialog(int) メソッドを使用することです。しかし、ビューの onTouch メソッド内から DismissDialog を呼び出すにはどうすればよいでしょうか?

たぶん、ある種のリスナーを設定する必要がありますか?もしそうなら、これを行うためのスケルトンコードは何でしょうか?

0 投票する
2 に答える
3256 参照

android - ViewGroup 例外: パラメータはこのビューの子孫でなければなりません

ユーザーからの例外ログを調べていたところ、次の一般的な例外が見つかりました。

この例外を適切に処理し、強制終了を防ぐ方法はありますか? 問題を再現できません。

Donut (1.5) の問題であるというこの Google スレッドが見つかり、修正されました。しかし、これは Android の新しいバージョンを使用しているユーザーから得ています。私の最小 API は 1.6 で、2.2 をターゲットにしています。

0 投票する
1 に答える
2426 参照

java - フィンガーペイント Android API デモにボタンを動的に追加する

ここで、FingerPaint api デモにボタンを動的に追加したいと思います。しかし、問題は、Java ファイルで動的にレイアウトを作成することに慣れていないことです。このクラスを実装してタイトルバーにボタンを追加する方法を誰かが知っていますか? コードサンプルをいただければ幸いです。

0 投票する
2 に答える
2341 参照

android - アニメーション ビューを含むカスタム ビューグループ

カスタム ビューグループを作成しましたが、ビュー アニメーションを使用していくつかのビューを回転させる必要があります...

しかし、onDraw、onLayout、または onMeasure 内に startanimation を配置しても、ビューがちらつきます (ビューが短時間回転し、次に短時間回転せず、そのパターンが繰り返されます)。

どうすれば修正できますか?

0 投票する
1 に答える
389 参照

android - マスク タッチ ジェスチャ - Android

OK、これを基本にしましょう。ホーム画面のようにスクロールできる3 つのpages( ) があります。viewgroupsそのうちの 1 つはpagesギャラリーです。問題は、ギャラリーケースをスワイプしpagesて変更することです。トラウチ ジェスチャをビューグループの特定の部分に制限することは可能ですか?

どんな助けでも感謝します。ありがとう!

0 投票する
3 に答える
975 参照

android - カスタムビューグループの9つのパッチ

9パッチとカスタムビューグループを作成し、そのビューグループの背景を9パッチにしました。

問題は次のとおりです。9つのパッチが「コンテンツ領域」の設定を無視しています。

だから:カスタムビューで9つのパッチを適切に使用するにはどうすればよいですか?

また:

OnMeasureおよびOnLayoutの計算で使用できるように、9つのパッチからコンテンツ領域を取得するにはどうすればよいですか?

0 投票する
1 に答える
2796 参照

android - Android onlayout メソッドで別のビューのサイズを変更する

私はこの問題を抱えています:カメラのプレビューをレンダリングするサーフェス ビューを処理するカスタム ビューグループがあります。onLayout メソッドで、この surfaceView のサイズを変更してカメラを正しく表示します。

このカスタム ビューグループは、カメラ プレビューの上にレンダリングしたい画像の背後にある相対的なレイアウトにあります。

ここで、カメラの surfaceView のサイズを変更するときに FrameImage のサイズを変更して、画像が常にカメラの真上にくるようにします。これは onLayout メソッドで発生します。surfaceView のサイズを変更すると同時に、ImageView のサイズを (プロパティ _viewToUpdate で) 変更します。

これは驚くべき動作をします:

  • カメラ サーフェス ビューは、アクティビティの起動時に正しくサイズ変更されます
  • FrameImage のサイズは変更されません。ただし、(ログのおかげで) _viewToUpdate が null ではないことは確かです。
  • 2 秒後、onClick イベントを使用してカスタム ViewGroup で requestLayout() を呼び出し、 surfaceViewと FrameImage のサイズを再計算すると、FrameImage のサイズが正しく変更されます。

カメラのサイズに応じて、アクティビティの起動時にこの FrameImage のサイズを変更する必要があります。現在のコードでなぜそうならないのか理解できません...どうすればいいですか?

0 投票する
3 に答える
4794 参照

android - ビューをViewGroupに追加するときにonMeasureをスキップできますか?

回答済み

ユーザーが垂直または水平にスクロールすると、ビューを動的に追加する RelativeLayout があります。スクロールできるもの全体を構成できる数千のビューが存在する可能性があるため、独自の ViewRecycler をロールバックしましたが、常に 30 程度しか表示しません。カレンダーの拡大表示を考えてみてください。

表示しようとしているビューを追加すると、パフォーマンスの問題が発生します。RelativeLayout で onMeasure が呼び出され、すべての子ビューで onMeasure が呼び出されます。私はすでに RelativeLayout の大きさを計算しており、それを LayoutParameters に設定しているので、ViewGroup を測定する必要はありません。追加されたビューは、それらのビューには関係ありません。

問題を示す簡単な例は、RelativeLayout にビューを追加/削除し、RelativeLayout のサイズや他のビューの位置に影響を与えないにもかかわらず、onMeasure が呼び出されるのを確認することです。

main.xml

MyActivity.java

これを実行すると、onMeasure への最初の (予想される) 呼び出しが 2 回表示され、次にボタンをクリックしてビューを追加/削除するたびに 1 回表示されます。これは明らかに問題なく実行されますが、ネストされたビューの複雑なレイアウトがある場合に onMeasure を常に呼び出すと問題が発生する可能性があることがわかります。

これらの onMeasure 呼び出しまたは少なくとも onMeasure 呼び出し measureChildren をバイパスする推奨される方法はありますか?