Нарисуйте горизонтальную линию внизу программы

Я должен изменить цвет разделителя моего listView динамически.

  1. решение:
    Поэтому я создаю Drawable программно, который рисует горизонтальную линию и устанавливает ее в качестве фона моего convertView. Теперь строка находится в середине моего convertView. Как я могу выровнять его по дну?

    public class DividerView extends Drawable {
    private Paint mPaint;
    
    public DividerView() {
        mPaint = new Paint();
        mPaint.setStrokeWidth(3);
    }
    
    @Override
    public void draw(Canvas canvas) {
        int lvl = getLevel();
        Rect b = getBounds();
        float x = b.width() * lvl / 10000.0f;
        float y = (b.height() - mPaint.getStrokeWidth()) / 2;
        mPaint.setColor(Color.BLACK);
        canvas.drawLine(x, y, b.width(), y, mPaint);
    }
    
    @Override
    protected boolean onLevelChange(int level) {
        invalidateSelf();
        return true;
    }
    
    @Override
    public void setAlpha(int alpha) {
    }
    
    @Override
    public void setColorFilter(ColorFilter cf) {
    }
    
    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }
    }
    
  2. решение:
    Я также попытался использовать фигуру в качестве разделителя и изменить ее цвет. Но я получаю следующее исключение:

    LayerDrawable cannot be cast to android.graphics.drawable.GradientDrawable
    

Как я могу получить доступ к обводке в моем списке слоев?
Вот мой код:

divider.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle" >
        <solid android:color="@android:color/transparent" />
    </shape>
</item>

<item android:top="-6dp" android:right="-6dp" android:left="-6dp">
    <shape>
        <solid android:color="@android:color/transparent" />
        <stroke
            android:width="1dp"
            android:color="#000000" />
    </shape>
</item>

ListAdapter.java

GradientDrawable drawable = (GradientDrawable)convertView.getBackground();
                    drawable.setStroke(3, Color.RED);
                    convertView.setBackground(drawable);

0 ответов

Другие вопросы по тегам