奇妙な問題があります、
私にはアクティビティがあります。このアクティビティ内に、ソーシャルネットワークで共有するためにイメージを作成したいレイアウトがあります。このレイアウトには、さまざまな動的画像とテキストが含まれています。そのため、静止画像として保存してオンデマンドで共有することはできません。ユーザーが共有ボタンをタッチしたときに画像を生成する必要があります。
問題は、共有する前にレイアウトを調整する必要があるということです。
ImageView profilPic = (ImageView)dashboardView.findViewById(R.id.profilePic);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)profilPic.getLayoutParams();
params.setMargins(10, 62, 0, 0);
profilPic.invalidate();
profilPic.requestLayout();
最初にレイアウトの余白を変更し、次にその画像を作成します
Bitmap bitmap = null;
try {
bitmap = Bitmap.createBitmap(dashboardView.getWidth(),
dashboardView.getHeight(), Bitmap.Config.ARGB_4444);
dashboardView.draw(new Canvas(bitmap));
} catch (Exception e) {
// Logger.e(e.toString());
}
FileOutputStream fileOutputStream = null;
File path = Environment
.getExternalStorageDirectory();
File file = new File(path, "wayzupDashboard" + ".png");
try {
fileOutputStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedOutputStream bos = new BufferedOutputStream(fileOutputStream);
bitmap.compress(CompressFormat.PNG, 100, bos);
try {
bos.flush();
bos.close();
fileOutputStream.flush();
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
そして最後に私はそれを共有します。
変更されたlayoutParamsを使用してレイアウトを再描画する前にレイアウトをキャプチャすることを除いて、基本的には機能します。レイアウトが再描画された後、新しいレイアウトパラメータが考慮された場合にのみ、このレイアウトをキャプチャする必要があります。
キャプチャコードを削除すると、うまく機能します。共有ボタンをタッチすると、レイアウトが移動します。しかし、キャプチャコードを配置すると、マージンを変更する前にレイアウトをキャプチャするだけです。
レイアウトをキャプチャする前に、レイアウトが再描画されていることを確認するにはどうすればよいですか?