我的一项活动中有一个ListView
。我有一个自定义视图,其中包含ImageView
。我想将此自定义视图添加为listview的背景。由于我们有两个函数setBackGroundDrawable(Drawable d)
和setBackGroundResource(resource)
。我不能使用其中任何一个?
谁知道我怎么能这样做?我搜索但无法得到任何解决方案。
答案 0 :(得分:1)
编辑:当我收到教程
当您想要动态绘制一些二维图形时,ShapeDrawable对象可能会满足您的需求。使用ShapeDrawable,您可以以编程方式绘制原始形状,并以任何可想象的方式设置样式。
ShapeDrawable是Drawable的扩展名,因此您可以使用预期可以使用Drawable的扩展名 - 可能用于视图的背景,使用setBackgroundDrawable()进行设置。当然,您也可以将自己的形状绘制为自己的自定义视图,然后将其添加到您的布局中。因为ShapeDrawable有自己的draw()方法,所以可以创建一个View的子类,在View.onDraw()方法中绘制ShapeDrawable。以下是View类的基本扩展,它将ShapeDrawable绘制为视图:
public class CustomDrawableView extends View {
private ShapeDrawable mDrawable;
public CustomDrawableView(Context context) {
super(context);
int x = 10;
int y = 10;
int width = 300;
int height = 50;
mDrawable = new ShapeDrawable(new OvalShape());
mDrawable.getPaint().setColor(0xff74AC23);
mDrawable.setBounds(x, y, x + width, y + height);
}
protected void onDraw(Canvas canvas) {
mDrawable.draw(canvas);
}
}
在构造函数中,ShapeDrawable定义为OvalShape。然后给它一个颜色,并设置形状的边界。如果不设置边界,则不会绘制形状,而如果不设置颜色,则默认为黑色。
定义自定义视图后,可以按照您喜欢的方式绘制。通过上面的示例,我们可以在Activity:
中以编程方式绘制形状CustomDrawableView mCustomDrawableView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCustomDrawableView = new CustomDrawableView(this);
setContentView(mCustomDrawableView);
}
如果您想从XML布局而不是从Activity中绘制此自定义drawable,则CustomDrawable类必须覆盖View(Context, AttributeSet)构造函数,该构造函数在通过XML通过膨胀实例化View时调用。然后将一个CustomDrawable元素添加到XML中,如下所示:
<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
ShapeDrawable类(与android.graphics.drawable包中的许多其他Drawable类型一样)允许您使用公共方法定义drawable的各种属性。您可能想要调整的一些属性包括Alpha透明度,滤色器,抖动,不透明度和颜色。
您还可以使用XML定义基本可绘制形状。有关详细信息,请参阅Drawable Resources document。
中有关Shape Drawables的部分试一试:
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.example.shapedrawable.CustomDrawableView
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"/>
</RelativeLayout>
并将自定义绘图设置为ImageView。
希望这会奏效。 :)
答案 1 :(得分:0)
您无法将自定义View
用作ListView
的背景。
但是,解决方法可能是:
RelativeLayout
作为父布局容器。LinearLayout
,其属性为fill_parent
高度list_background
提供给LinearLayout
。ListView
添加到父RelativeLayout
。android:layout_centerInParent="true"
添加到两个
ListView
和LinearLayout
ListView
和CustomRow
的背景
任何LinearLayout
并将View
添加到其中
LinearLayout