java - 使 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>
解决方案
推荐阅读
- npx - 命令行中的 npx 找不到导入?
- asp.net - 无法使客户端证书密钥的 asp.net 转换工作
- amazon-web-services - 公共 DockerHub 映像的 Docker ecs 集成失败,“insufficient_scope:授权失败”host=registry-1.docker.io”
- javascript - getBoundingClientRect() 返回 0,我做错了什么?
- javascript - 如何将道具传递给子对象?孩子们只会有一个按钮或一个文本
- r - 绕过“休息”的方法可能不跨越 x 的范围?
- discord - TypeError:无法读取 null 的属性“活动”
- facebook - Facebook 登录按钮不会触发 data-onlogin
- python - xgboost 测试数据从 train 类到 Booster 类的转换
- java - Websocket 连接失败 - 使用 SSL + java 11 的 Jetty 7.6 但适用于 Java 8