0

ProgressBarクラスを拡張して、垂直プログレスバーを実装しました。私が意図していない大きな長方形の領域をクリアすることを除いて、すべてがうまく機能します。

メインのレイアウトxmlでのプログレスバーの定義は次のとおりです。

<info.realjin.someapp.view.VerticalProgressBar
    android:id="@+id/progressbar1" android:layout_width="wrap_content"
    android:layout_height="fill_parent" android:layout_marginTop="50dip"
    style="@style/Widget.ProgressBar.RegularProgressBar" />

スタイルxmlは次のとおりです。

<style name="Widget"></style>

<style name="Widget.ProgressBar">
    <item name="android:indeterminateOnly">true</item>
    <item name="android:indeterminateBehavior">repeat</item>
    <item name="android:indeterminateDuration">3500</item>
    <item name="android:minWidth">4dip</item>
    <item name="android:maxWidth">40dip</item>
    <item name="android:minHeight">4dip</item>
    <item name="android:maxHeight">400dip</item>
</style>

<style name="Widget.ProgressBar.RegularProgressBar">
    <item name="android:indeterminateOnly">false</item>
    <item name="android:progressDrawable">@drawable/newsprogressbar</item>
    <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
    <item name="android:minHeight">1dip</item>
    <item name="android:maxHeight">400dip</item>
</style>

私の知る限り、水平プログレスバー(公式プログレスバー)の定義では、「android:layout_width」属性は「fill_parent」であり、「android:layout_height」属性は「wrap_content」である必要があります。そして、私の垂直プログレスバーの定義では、バーの機能をうまく取得するために、上記のようにこれら2つの属性を逆に定義する必要があります。ただし、これを行うと、冒頭で述べたように、プログレスバーの上部と下部の間のすべてのビューがクリアされます。どうすればそれを回避できますか?

ちなみに、私は実験を行いました---垂直プログレスバークラスがメソッドをオーバーライドせずに公式プログレスバークラスを拡張しても、領域はクリアされます。

4

1 に答える 1

0

これについては、少し前にチュートリアルを書きました。http://www.androidenea.com/2011/10/creating-custom-view-part-1-graphics.html 独自のコードのインスピレーションとして自由に使用してください。

これ以上調べないと、あなたのビューは onMeasure で間違った測定値を報告していると思われます。

于 2012-08-23T06:31:27.780 に答える