Как объединить взгляды в GridView в центре? - PullRequest
0 голосов
/ 10 ноября 2019

Я использую GridView для создания палитры цветов. Внутри каждой клетки есть круг. Даже если я установлю содержимое переноса для layout_width и layout_height, между столбцами всегда будет разрыв. Я хочу объединить ячейки в центре или удалить эти пробелы.

Вот макет моего GridView xml.

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/color_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:numColumns="3" />

Класс CircleView

public class CircleView extends View {
    private static final String TAG = "CircleView";
    private Paint mCirclePaint;
    private int mCircleColor;

    private Paint mStrokePaint;
    private int mStrokeColor;

    private int mWidthInDp;
    private int mHeightInDp;

    public CircleView(Context context){
        super(context);

        mCirclePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mCirclePaint.setColor(mCircleColor);
    }

    @Override
    protected void onMeasure(int widthMeasuredSpec, int heightMeasuredSpec) {
        Log.d(TAG, "onMeasure: ");

        setMeasuredDimension(mWidthInDp, mHeightInDp);
    }

    public void setLayoutParamsInDp(int width, int height){
        this.mWidthInDp = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, width, getResources().getDisplayMetrics());
        this.mHeightInDp = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, height, getResources().getDisplayMetrics());
    }

    public void setCircleColor(int color){
        this.mCircleColor = color;
        mCirclePaint.setColor(mCircleColor);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int centerX = mWidthInDp / 2;
        int centerY = mHeightInDp / 2;

        float radius = Math.min(mWidthInDp, mWidthInDp) / 2;

        canvas.drawCircle(centerX, centerY, radius, mCirclePaint);
        canvas.save();
    }
}

Адаптер GridView

    @Override
    public View getView(int position, View convertView, ViewGroup viewGroup) {
        CircleView circleView = new CircleView(mContext);
        circleView.setCircleColor(mColors.get(position));
        circleView.setLayoutParamsInDp(50, 50);
        return circleView;
    }

Вот вывод. Как я могу удалить пробелы между кругами?

enter image description here

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

Я думаю, что проблема в GridView как родитель. Добавьте другой макет в качестве родительского и добавьте GridView с шириной и высотой в качестве содержимого переноса!

0 голосов
/ 10 ноября 2019

используйте это

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/color_picker"
    android:numColumns="3"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:horizontalSpacing="0dip"
    android:verticalSpacing="0dip">
</GridView>
...