我希望能夠擁有多個RelativeLayouts的屏幕,並且我希望頂部佈局和底部佈局具有圓角,所以頂部佈局將具有頂部2角落圓角,底部佈局將有底部2角落圓角。Android圍繞佈局背景圖像,只有頂部或底部的角落
我的問題是,我在網上找到的所有例子都使用shape.xml來創建一個圓角,並給它一個漸變,這是不夠好,因爲我想給relativeLayout一個背景圖像,並有那個形象圓潤了,我似乎無法做到這一點。
任何幫助將不勝感激!
編輯 - 賞金開始
好吧,我一直在敲打我的頭靠在牆上的這一個年齡段。目前我正在使用名爲UITableView的第三方工具,主要是測試一些東西。
https://github.com/thiagolocatelli/android-uitableview
它建立的tableView方式類似於iPhone表是的,我希望能夠給每一行的背景圖像,並有彎曲的頂部和底部行。在這種的UITableView類,下提交,該代碼被稱爲
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,並使用白色梯度,而不是一個圖像變圓。我需要能夠膨脹佈局,然後彎曲頂部和底部的角落。我已經看過很多裁剪角落的例子,甚至嘗試了不同的第三方工具,但還沒有找到一個例子,它顯示了將一個背景圖像應用於一個容器,然後將角落四捨五入。
有沒有人有任何想法如何做到這一點?
編輯:
在iPhone上,你可以做這樣的事情
UIColor *color = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"image.png"]];
當你將圖像轉換成彩色。 Android是否具有相同的功能?
編輯:
感謝ACheese的答案,我修改了代碼,並分離成3種方法,一個頂級圓角,一個完全圓角,還有一個底部圓角,又上來與此
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));
}
我使用指標設置多少舍入視圖,因此它隨着不同的屏幕尺寸縮放。
希望能幫助有這個問題的人!
因此,您需要爲您的活動中的主佈局設置圓角背景,是否正確..或甚至它不在活動中,以容納其他視圖的主容器? – hardartcore 2013-03-13 12:12:38
正確的,我需要能夠給該容器一個背景圖像,並有該容器的角落2圓角,無論是頂部2角落或底部2角落 – AdamM 2013-03-13 12:15:18
如果你想活動的背景有圓角,那麼這活動應首先透明化。然後,將您的圓形圖像設置爲底部視圖的背景。 – Lumis 2013-03-19 23:13:41