首页 > 解决方案 > 使 Gridview 内的 TextView 完全圆润

问题描述

我正在尝试CalendarView在 Android 中进行自定义,我可以向其中添加事件。我正在尝试制作与原版类似的东西CalendarView,但我很难让TextView内部GridView完全是圆形的,即使在点击动画上也有一个圆形边框。

我做了一个自定义TextView调用CircularTextView,我试图用它覆盖该draw方法以获得完整的循环效果。但问题是点击的背景仍然是方形的。

CircularTextView班级:

package com.example.owncalendar;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

@SuppressLint("AppCompatCustomView")
public class CircularTextView extends TextView {

    public CircularTextView(Context context) {
        super(context);
    }

    public CircularTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CircularTextView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }


    @Override
    public void draw(Canvas canvas) {

        Paint circlePaint = new Paint();
        circlePaint.setColor(getResources().getColor(R.color.colorAccent));
        circlePaint.setFlags(Paint.ANTI_ALIAS_FLAG);

        int h = this.getHeight();
        int w = this.getWidth();

        int diameter = ((h > w) ? h : w);
        int radius = diameter / 2;

        this.setHeight(diameter);
        this.setWidth(diameter);

        canvas.drawCircle(diameter / 2, diameter / 2, radius, circlePaint);
        Log.d("DRAWN", "Drawn");
        super.draw(canvas);
    }
}

在 GridView 中加载的视图:

<com.example.owncalendar.CircularTextView android:id="@+id/textView"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:layout_gravity="center"
    android:background="@drawable/round_textview"
    android:fontFamily="@font/roboto_light"
    android:gravity="center"
    android:padding="4dp"
    android:textSize="18sp"
    android:layout_centerHorizontal="true"
    xmlns:android="http://schemas.android.com/apk/res/android" />

round_textview绘制:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="@android:color/transparent" />
    <size android:width="40dp" android:height="40dp"/>

    <padding
        android:left="1dp"
        android:right="1dp"
        android:bottom="1dp"
        android:top="1dp" />

    <corners android:radius="100dp" />
</shape>

它应该是这样的: 例子

标签: javaandroidgridviewtextview

解决方案


推荐阅读