[解決済み] Androidでビューを表示せずにBitmapに変換する?
2022-05-13 11:31:45
質問
具体的にどうすればいいのか、説明します。
私はA,B,Cという3つの独立した画面を持っています。ホーム画面と呼ばれる別の画面があり、3つの画面のビットマップはすべてギャラリービューに表示され、ユーザーはどのビューに移動したいかを選択することができる必要があります。
HomeScreen Activityにのみすべてのコードを配置することで、3画面すべてのビットマップを取得し、ギャラリービューに表示することができました。しかし、これではコードが複雑になってしまうので、もっとシンプルにしたいと思います。
そこで、HomeScreenから別のActivityを呼び出して、それを表示せず、その画面のBitmapを取得するだけでよいのでしょうか?例えば、私がHomeScreenを呼び出しただけで、Activity A,B,Cを呼び出し、A,B,CのどのActivityも表示されないとします。getDrawingCache()でそのスクリーンのBitmapを取得するだけです。そして、HomeScreenのギャラリービューにそのビットマップを表示することができます。
問題を明確に説明できたと思います。
実際に可能かどうか教えてください。
解決方法は?
BitmapとCanvasを作成し、view.draw(canvas)を呼び出す必要があります。
以下はそのコードです。
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
v.draw(c);
return b;
}
ビューが以前に表示されていなかった場合、そのサイズはゼロになります。このように測定することが可能です。
if (v.getMeasuredHeight() <= 0) {
v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
v.draw(c);
return b;
}
EDIT: によると
本論文
,
パス
WRAP_CONTENT
への値として
makeMeasureSpec()
もってのほか
(一部のビュークラスでは動作しますが)、推奨される方法は
// Either this
int specWidth = MeasureSpec.makeMeasureSpec(parentWidth, MeasureSpec.AT_MOST);
// Or this
int specWidth = MeasureSpec.makeMeasureSpec(0 /* any */, MeasureSpec.UNSPECIFIED);
view.measure(specWidth, specWidth);
int questionWidth = view.getMeasuredWidth();
関連
-
[解決済み] DrawableをBitmapに変換する方法は?
-
AndroidStudio3.0 Error:Execution failed for task ':app:processDebugResources'.
-
Androidで発生した問題、解決策とヒント
-
Android Bluetooth 開発の基本プロセス
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
Androidのadbデバイスがオフラインであることが判明
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
Error:A problem occurred configuring project ':app'. > ビルドを見つけられませんでした。
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない
-
Androidカスタムドロップダウンリストボックスコントロール
-
アンドロイドの遅延実行のいくつかの方法
-
アンドロイドにおけるトークンの利用
-
[解決済み】AndroidのTextViewのオートフィットについて