複数のRelativeLayoutsを含む画面を作成したいのですが、上部のレイアウトと下部のレイアウトの角を丸くしたいので、上部のレイアウトでは上部の2つの角を丸め、下部のレイアウトでは下部の2つの角を丸めます。
私の問題は、オンラインで見つけたすべての例で、shape.xmlを使用して丸みを帯びた角を作成し、グラデーションを付けています。これは、relativeLayoutに背景画像を与え、その画像を丸みを帯びさせたいため、十分ではありません。そして、私は両方を行うことができないようです。
どんな助けでも大歓迎です!!
編集-報奨金が開始されました
さて、私はこれで何年もの間壁に頭をぶつけてきました。現在、UITableViewというサードパーティのツールを使用しており、主に何かをテストしています。
https://github.com/thiagolocatelli/android-uitableview
iPhoneのテーブルと同じようにtableViewを設定します。各行に背景画像を付け、上下の行を湾曲させたいと考えています。このUITableViewクラスでは、commitの下で、このコードは呼び出されます
public void commit()
{
mIndexController = 0;
if (mItemList.size() > 1)
{
// when the list has more than one item
for (IListItem obj : mItemList)
{
View tempItemView;
if (mIndexController == 0)
{
//tempItemView = new RoundedView(context_i, this);
tempItemView = mInflater.inflate(R.layout.list_item_top,null);
}
else if (mIndexController == mItemList.size() - 1)
{
tempItemView = mInflater.inflate(R.layout.list_item_bottom,null);
}
else
{
tempItemView = mInflater.inflate(R.layout.list_item_middle,null);
}
setupItem(tempItemView, obj, mIndexController);
tempItemView.setClickable(obj.isClickable());
mListContainer.addView(tempItemView);
mIndexController++;
}
}
else if (mItemList.size() == 1)
{
// when the list has only one item
View tempItemView = mInflater.inflate(R.layout.list_item_single,
null);
IListItem obj = mItemList.get(0);
setupItem(tempItemView, obj, mIndexController);
tempItemView.setClickable(obj.isClickable());
mListContainer.addView(tempItemView);
}
}
彼は上中央と下の行、上と下の丸みを帯びた使用済みXMLのレイアウトスタイルを持っていますが、問題は、各行に画像を与えたいということです。だから私はこのコードを追加しました
tempItemView.setBackgroundResource(R.drawable.background);
ただし、問題は、画像ではなくXMLと白いグラデーションを使用して角が丸められるため、上と下の行の湾曲した角が削除されることです。レイアウトを膨らませてから、上下の角を曲げることができる必要があります。角を切り取った例をたくさん見て、さまざまなサードパーティツールを試しましたが、背景画像をコンテナに適用してから角を丸める例はまだ1つも見つかりませんでした。
誰かがこれを行う方法について何かアイデアがありますか?
編集:
iPhoneでは、次のようなことができます
UIColor *color = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
画像を色に変換する場所。Androidには同等のものがありますか?
編集:
答えてくれたACheeseのおかげで、私は彼のコードを変更し、3つのメソッドに分けました。1つは上部の丸い角、1つは完全に丸い角、もう1つは下部の丸い角です。
public void setBackgroundRounded(int resID, int w, int h, View v)
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
double dH = (metrics.heightPixels / 100) * 1.5;
int iHeight = (int)dH;
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
Shader shader = new BitmapShader(BitmapFactory.decodeResource(
getResources(), resID), Shader.TileMode.MIRROR,
Shader.TileMode.MIRROR);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
paint.setAntiAlias(true);
paint.setShader(shader);
RectF rec = new RectF(0, 0, w, h);
c.drawRoundRect(rec, iHeight, iHeight, paint);
v.setBackgroundDrawable(new BitmapDrawable(getResources(), bmp));
}
public void setTopRounded(int resID, int w, int h, View v)
{
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
Shader shader = new BitmapShader(BitmapFactory.decodeResource(
getResources(), resID), Shader.TileMode.MIRROR,
Shader.TileMode.MIRROR);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
paint.setAntiAlias(true);
paint.setShader(shader);
RectF rec = new RectF(0, 0, w, h - 20);
c.drawRect(new RectF(0, 20, w, h), paint);
c.drawRoundRect(rec, 20, 20, paint);
v.setBackgroundDrawable(new BitmapDrawable(getResources(), bmp));
}
public void setBottomRounded(int id, int w, int h, View v)
{
DisplayMetrics metrics = getResources().getDisplayMetrics();
double dH = (metrics.heightPixels / 100) * 1.5;
int iHeight = (int)dH;
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
Shader shader = new BitmapShader(BitmapFactory.decodeResource(
getResources(), id), Shader.TileMode.MIRROR,
Shader.TileMode.MIRROR);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
paint.setAntiAlias(true);
paint.setShader(shader);
RectF rec = new RectF(0, 0, w, h);
c.drawRoundRect(rec, iHeight, iHeight, paint);
c.drawRect(new RectF(0, 0, w, h-iHeight), paint);
v.setBackgroundDrawable(new BitmapDrawable(getResources(), bmp));
}
メトリックを使用してビューを丸める量を設定しているため、さまざまな画面サイズに合わせて拡大縮小します。
この問題を抱えていた他の人に役立つことを願っています!!