我需要在ListView的每个单元格中放置一个小的垂直进度条。 我花了很多时间尝试使用不同的技术制作自己的自定义进度条。这里是其中的一些: 我尝试将两个ImageView一个放在另一个上面,将其背景颜色切换为类似于标准ProgressBar。事情是改变他们的位置和高度,使其看起来正在进行中。 另一种解决方案是使用custom shape
但我总是遇到同样的问题:在我做任何使用之前,视图不会重绘。 无论如何,我在想,如果我使用标准的ProgressBar会自动重绘,但会旋转它。
有谁知道如何将ProgressBar或任何其他解决方案轮换到我的问题?
答案 0 :(得分:0)
最后回答我自己的问题。为了使标准进度条垂直,您应该创建一个继承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>