安卓 : Draw Circle With Text Inside

标签 android android-layout android-canvas android-view

我需要在我的 fragment 中画三个圆圈,圆圈大小不同,我引用这个 link 我得到的结果是这样的

enter image description here

这是我的 XML 代码:已更新

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" >
         <TextView
             android:id="@+id/large_volume"
             android:layout_width="185dp"
             android:layout_height="185dp"
             android:background="@drawable/circle"
             android:gravity="center"
             android:text="My name is NON"
             android:textColor="#FFFFFF"
             android:textSize="10dp" />

         <TextView
             android:id="@+id/medium_volume"
             android:layout_width="120dp"
             android:layout_height="120dp"
             android:layout_alignTop="@+id/large_volume"
             android:layout_toRightOf="@+id/large_volume"
             android:background="@drawable/circle"
             android:gravity="center"
             android:text="My name is NON"
             android:textColor="#FFFFFF"
             android:textSize="10dp" />

         <TextView
             android:id="@+id/TextView02"
             android:layout_width="90dp"
             android:layout_height="90dp"
             android:layout_below="@+id/medium_volume"
             android:layout_toRightOf="@+id/large_volume"
             android:background="@drawable/circle"
             android:gravity="center"
             android:layout_marginTop="-3dp"
             android:layout_marginLeft="-17dp"
             android:text="My name is NON"
             android:textColor="#FFFFFF"
             android:textSize="10dp" />

    </RelativeLayout>

但我需要的是这样的enter image description here

你可以看到圆圈必须靠得很近,但是当我使用 XML View 时,我无法做到这一点。我怎样才能做到这一点,我需要 onClickListeners 在我的圈子里,这就是我使用 View 的原因

这可以通过 Canvas 绘制实现吗,我听说 Canvas 不是 View 所以这将限制我给点击监听器,如果我错了请纠正我

更新:

我通过 XML 方法满足我的需求,有没有办法通过 Canvas 绘图来实现这一点,我应该为此发布另一个问题吗??

最佳答案

试试这个

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <TextView
                android:id="@+id/num_txt"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_marginTop="0dp"
                android:background="@drawable/bg_red"
                android:gravity="center"
                android:text="My name is NON"
                android:textColor="#FFFFFF"
                android:textSize="10dp" />

        </RelativeLayout>

    </RelativeLayout>

保存在drawable bg_red.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
        android:shape="oval">
        <corners android:radius="10dip"/>
        <stroke android:color="#FF0000" android:width="5dip"/>
        <solid android:color="#FF0000"/>
    </shape>

编辑代码

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" >
         <TextView
             android:id="@+id/num_txt"
             android:layout_width="185dp"
             android:layout_height="185dp"

             android:layout_alignParentTop="true"
             android:layout_marginTop="163dp"
             android:background="@drawable/bg_red"
             android:gravity="center"
             android:text="My name is NON"
             android:textColor="#FFFFFF"
             android:layout_marginLeft="10dp"
             android:textSize="10dp" />

         <TextView
             android:id="@+id/TextView02"
             android:layout_width="90dp"
             android:layout_height="90dp"
             android:layout_alignParentRight="true"
             android:layout_alignTop="@+id/TextView01"
             android:layout_marginRight="90dp"
             android:layout_marginTop="122dp"
             android:background="@drawable/bg_red"
             android:gravity="center"
             android:text="My name is NON"
             android:textColor="#FFFFFF"
             android:textSize="10dp" />

         <TextView
             android:id="@+id/TextView01"
             android:layout_width="120dp"
             android:layout_height="120dp"
             android:layout_alignTop="@+id/num_txt"
             android:layout_toRightOf="@+id/num_txt"
             android:background="@drawable/bg_red"
             android:gravity="center"
             android:text="My name is NON"
             android:textColor="#FFFFFF"
             android:textSize="10dp" />

    </RelativeLayout>

ConstraintLayout 用于徽章计数。

enter image description here

    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:gravity="center">

        <ImageView
            android:id="@+id/tab_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:background="@android:color/transparent"
            android:scaleType="centerInside"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/ic_home"
            tools:layout_constraintBottom_creator="1"
            tools:layout_constraintLeft_creator="1"
            tools:layout_constraintRight_creator="1"
            tools:layout_constraintTop_creator="1" />

        <TextView
            android:id="@+id/tab_badge"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:background="@drawable/icon_badge"
            android:paddingBottom="1dp"
            android:paddingLeft="6dp"
            android:paddingRight="6dp"
            android:paddingTop="1dp"
            android:text="10"
            android:textAppearance="@style/TextAppearance.AppCompat.Small"
            android:textColor="@android:color/white"
            android:textSize="12dp"
            app:layout_constraintBottom_toBottomOf="@+id/tab_icon"
            tools:layout_constraintLeft_creator="1"
            android:layout_marginLeft="14dp"
            app:layout_constraintLeft_toLeftOf="@+id/tab_icon" />
    </android.support.constraint.ConstraintLayout>

关于安卓 : Draw Circle With Text Inside,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21178193/

相关文章:

java - Android通过Local Service向Activity发送数据

android - 缩小屏幕上的对话框

Android奇怪的绘图 Canvas 错误?

android - 如何在 Android 上执行类似 AffineTransform.transform 的操作?

java - 服务器套接字未监听正确的 IP 地址

android - 在 Android 中通过 C 代码执行命令

java - 错误 :Execution failed for task ':app:transformClassesWithDexForDebug' . >

android - 图像 GridView 内部 fragment

android - 如何以编程方式将多个自定义 linearLayouts 添加到 listView 项目

android - Jetpack compose Canvas 混合模式未按预期工作