是否可以在Xamarin Studio(Android)中使ProgressBar垂直

本文关键字:Android 中使 ProgressBar 垂直 Studio Xamarin 是否 | 更新日期: 2023-09-27 18:30:35

我需要在ListView的每个单元格中放置一个小的垂直进度条。我花了很多时间尝试使用不同的技术制作自己的自定义进度条。以下是其中的一些:我尝试将两个 ImageView 一个放在另一个之上,切换它们的背景颜色以使其看起来类似于标准进度条。事情是改变它们的位置和高度,使其看起来像是在进行中。另一种解决方案是使用自定义形状

但我总是面临同样的问题:在我执行任何用户操作之前,视图不会重新绘制。无论如何,我在想,如果我使用标准进度条,它会自动重绘,但旋转它怎么办。

有谁知道如何旋转进度条或我的问题的任何其他解决方案?

是否可以在Xamarin Studio(Android)中使ProgressBar垂直

终于回答了我自己的问题。为了使标准进度条垂直,您应该创建一个继承自进度条的类并重写 Draw 方法:

public class VerticalProgressBar : ProgressBar
{
    protected VerticalProgressBar(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
    {
    }
    public VerticalProgressBar(Context context) : base(context)
    {
    }
    public VerticalProgressBar(Context context, IAttributeSet attrs) : base(context, attrs)
    {
    }
    public VerticalProgressBar(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)
    {
    }
    protected override void OnSizeChanged (int w, int h, int oldw, int oldh)
{
    base.OnSizeChanged (h, w, oldh, oldw); //Fixes the width-height issue
}
public override void Draw(Android.Graphics.Canvas canvas)
{
    canvas.Rotate(-90); //Rotating the canvas around (0,0) point of the control
    canvas.Translate(-Height, 0); //Moving the canvas inside the control rect
    base.OnDraw(canvas);
}
}

之后,可以在代码中添加控件,也可以在 .axml 文档中使用新控件编写包含它的命名空间,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <YOUR_NAMESPACE.VerticalProgressBar
        android:id="@+id/progress"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="10px"
        android:layout_height="100px" />
    <LinearLayout
        android:id="@+id/linearText"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:layout_marginLeft="10px"
        android:layout_marginTop="10px">
        <TextView
            android:id="@+id/textTop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
        <TextView
            android:id="@+id/textBottom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    </LinearLayout>
</RelativeLayout>