ViewGroup(RelativeLayout)をCanvasを使用してビットマップに変換しています。しかし、描画が発生したとき、私は、その背景描画可能なViewGroupと、FILL_PARENTのようなルールを使ってRelativeLayout内にレイアウトされるべき子(2つのTextViews)ではなく、ViewGroupを見るだけです。Androidの問題子供とビューグループをビットマップに変換する
RelativeLayoutは、次の静的関数を使用して作成されます。予想したように、これは私での素敵なビットマップを与える
public static Bitmap loadBitmapFromView(RelativeLayout v) {
Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.draw(c);
return b;
}
:私は、次のビットマップにRelativeLayoutを回すために使用
public static RelativeLayout createProgrammeView(Context context, int width, int height, String title, String time) {
RelativeLayout.LayoutParams params;
// Layout Root View (RelativeLayout)
RelativeLayout rlv = new RelativeLayout(context);
params = new RelativeLayout.LayoutParams(width, height);
rlv.setLayoutParams(params);
rlv.setPadding(3, 3, 3, 3);
rlv.setBackgroundResource(R.drawable.background);
// Layout Title
TextView tv = new TextView(context);
params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
tv.setId(R.id.title);
tv.setLayoutParams(params);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setSingleLine(true);
tv.setEllipsize(TruncateAt.END);
tv.setTextColor(Color.parseColor("#fff"));
tv.setTextSize(11);
tv.setText(title);
rlv.addView(tv);
// Layout Start Time
tv = new TextView(context);
params = new RelativeLayout.LayoutParams(16, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.title);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.setMargins(0, 4, 0, 0);
tv.setId(R.id.time);
tv.setLayoutParams(params);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setSingleLine(true);
tv.setEllipsize(null);
tv.setTextColor(Color.parseColor("#fff"));
tv.setTextSize(10);
tv.setText(time);
rlv.addView(tv);
}
return rlv;
}
を背景drawableで必要な次元ですが、子はビットマップにありません。これらの関数をかなりたくさん呼び出すことで大きな画像を作成し、それを自分のアクティビティのカスタムビューに描画します。
これは、静的な関数を呼び出すループである:私はこれが原因のAndroidのdoesnであると考えて見ることができるものから
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(largeBitmap, 0, 0, null);
}
:
public static void renderViews(final Context context) {
largeBitmap = Bitmap.createBitmap(largeWidth, largeHeight, Bitmap.Config.RGB_565);
Canvas largeCanvas = new Canvas(largeBitmap);
for (int i = 0; i < items.size(); i++) {
int leftMargin = ...SOME CALCULATIONS...;
RelativeLayout newView = createProgrammeView(context, width, rowHeight, "Title", "21:00");
Bitmap newViewBitmap = loadBitmapFromView(newView);
largeCanvas.drawBitmap(newViewBitmap, leftMargin, 0, new Paint());
}
myCustomView.invalidate();
}
マイカスタムビューは、onDraw()関数をオーバーライドします子ビューでmeasure()を呼び出しません。私はこれを手動で呼び出すことを試みたが、これは問題を解決しない。
私は、子どもと一緒にRelativeLayoutをBitmapに変換し、相対レイアウトルールを尊重するために子供を測定するためにAndroidを取得する方法を知りたいと思います。
私はこれを解決する手助けをすることができます誰もに感謝します。
ロブ
優れています。本当にありがとうロメイン!私はそれがmeasure()とlayout()と関係があることを知っていましたが、それをすべて結びつける仕組みはできませんでした。再度、感謝します。 –
私のために働いた。ありがとう! – Doigen
私のために働いた。ありがとう.. –