android - 在 View 的背景中画一个半圆

标签 android

我正在尝试创建一个背景为半圆的 TextView。我使用 ShapeDrawable 创建了一个椭圆。我尝试通过使用 ScaleDrawable 将椭圆的垂直大小加倍并剪辑它来创建一个半圆。但是,ScaleDrawable 没有效果。为什么不?在 View 的背景中绘制半圆的最佳方法是什么?

res/layout/activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <TextView
        android:id="@+id/main_view"
        android:background="@drawable/semicircle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:gravity="center_horizontal"
    />
    </RelativeLayout>

res/drawable/semicircle.xml

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/circle"
    android:scaleGravity="top|clip_vertical"
    android:scaleHeight="200%"
    android:scaleWidth="100%" >
</scale>

res/drawable/circle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    <solid
        android:color="#444" />
</shape>

src/.../MainActivity.java

//...
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
        findViewById(R.id.main_view).getBackground().setLevel(10000);
    }
//...

最佳答案

要裁剪椭圆形,只需将其嵌入到 ClipDrawable 中,如下所示:

res/drawable/semicircle.xml

<?xml version="1.0" encoding="utf-8"?>
<clip
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="vertical"
    android:gravity="bottom">
    <shape android:shape="oval">
        <solid android:color="#444"/>
    </shape>
</clip>

ClipDdrawable共同目的是创建自定义进度条。它会剪切一部分内容,并在其“级别”属性在 [0; 10000](0=隐藏,10000=完全显示)。

  • clipOrientation 是剪辑进度的方向。
  • gravity 是剪辑进度开始边/边。

要获得一个半圆,请将此 ClipDrawable 设置为您的 View 背景,并以编程方式调整其“级别”:

//...
findViewById(R.id.my_view).getBackground().setLevel(5000)
//...

适用于所有 Android 版本(“在 API 级别 1 中添加”)并且不需要自定义 View 。

;-)

关于android - 在 View 的背景中画一个半圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962745/

相关文章:

android - 通过 btn 单击启动 Android 默认电子邮件应用程序

java - 对 __android_log_print 错误的 undefined reference

android - 我应该选择哪种应用程序间通信?

java - 使用 SharedPreferences 从永久存储的集合中以随机顺序获取数据

android - 如何使用 React Native 开发电子邮件客户端应用程序

android - 适用于 Android 的 Upnp native 扩展 - AIR

android - 尝试在空对象引用上调用虚拟方法 'int java.lang.String.length()' - Android

android - 如何在 Android Studio 中打开 Android 应用程序中的任何网站

java - RSS Feed 解析并在 ListView 中显示结果,然后在单击帖子时显示正文

android - 如何在不留下空间的情况下使 recyclerview 项目可见并消失 - Kotlin?