Как установить фон списка? - PullRequest
0 голосов
/ 20 августа 2011

У меня есть ListView в одном из моих действий.У меня есть один пользовательский вид, созданный с расширением ImageView. Я хочу добавить этот пользовательский вид в качестве фона списка. Поскольку у нас есть две функции setBackGroundDrawable(Drawable d) и setBackGroundResource(resource). Я не могу использовать ни одну из этих функций?У кого-нибудь есть хорошая идея, как я могу это сделать?Я искал, но не мог найти решение.

Ответы [ 2 ]

1 голос
/ 20 августа 2011

Отредактировано: как я получил учебник

Когда вы хотите динамически нарисовать некоторую двухмерную графику, объект ShapeDrawable, вероятно, подойдет вашим потребностям. С ShapeDrawable вы можете программно рисовать примитивные фигуры и стилизовать их любым удобным для вас способом.

ShapeDrawable является расширением Drawable , поэтому вы можете использовать его там, где ожидается Drawable - возможно, для фона вида, установленного с помощью setBackgroundDrawable () . Конечно, вы также можете нарисовать свою форму в виде собственного пользовательского вида, который будет добавлен в ваш макет, как вам угодно. Поскольку ShapeDrawable имеет свой собственный метод draw (), вы можете создать подкласс View , который рисует ShapeDrawable во время метода View.onDraw (). Вот базовое расширение класса View, которое делает это, чтобы нарисовать ShapeDrawable как View:

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 . Затем задается цвет и устанавливаются границы фигуры. Если вы не установите границы, то форма не будет нарисована, тогда как если вы не установите цвет, по умолчанию будет черный.

С определенным пользовательским представлением его можно нарисовать любым способом. На примере выше мы можем программно нарисовать фигуру в Деятельности:

CustomDrawableView mCustomDrawableView;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mCustomDrawableView = new CustomDrawableView(this);

    setContentView(mCustomDrawableView);
}

Если вы хотите нарисовать этот пользовательский чертеж из макета XML, а не из Activity, то класс CustomDrawable должен переопределить конструктор View (Context, AttributeSet) , который вызывается при создании экземпляра Просмотр через инфляцию из XML. Затем добавьте элемент CustomDrawable в XML, например, так:

<com.example.shapedrawable.CustomDrawableView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />

Класс ShapeDrawable (как и многие другие типы Drawable в пакете android.graphics.drawable ) позволяет вам определять различные свойства drawable с помощью открытых методов. Некоторые свойства, которые вы можете настроить, включают альфа-прозрачность, цветной фильтр, дизеринг, непрозрачность и цвет.

Вы также можете определять примитивные нарисованные фигуры, используя XML. Для получения дополнительной информации см. Раздел о Drawable Shape в документе Drawable Resources .

Попробуйте:

<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.

Надеюсь, это сработает. :)

0 голосов
/ 20 августа 2011

Вы не можете использовать свой пользовательский View в качестве фона ListView. Однако обходной путь может быть:

  • Используйте RelativeLayout в качестве родительского контейнера макета.
  • Добавьте LinearLayout со свойством fill_parent для ширины и высота
  • Дайте любой идентификатор как list_background LinearLayout.
  • Затем добавьте ListView к родителю RelativeLayout.
  • Добавить свойство android:layout_centerInParent="true" к обоим ListView и LinearLayout
  • Удалите фон ListView и ваш CustomRow, если у вас есть есть.
  • Теперь получите LinearLayout в Java и добавьте View к этому LinearLayout
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...