0

ボタンがタップされるとすぐに、テキストの代わりにボタンの中央に表示される進行状況バーを持つボタンを作成しようとしています。私がやっていることは、カスタム ボタンを作成し、アニメーション化可能なものをボタンの左にあるドローアブルとして設定し、onDraw でアニメーション化可能なものをボタンの中央に移動することです。ただし、ボタンをタップしてからしばらくすると、ボタンにプログレス バーが 2 つ表示される理由がわかりません。

public class ButtonWithProgressBar extends Button {
protected int progressId = R.drawable.progress_bar;
protected Drawable progress;
protected CharSequence buttonText;

@Override
public void setText(CharSequence text, BufferType type) {
    super.setText(text, type);
    if (Strings.notEmpty(text)) {
        buttonText = text;
    }
}

public void startSpinning()
{
    if(isSpinning()){
        return;
    }

    progress = getContext().getResources().getDrawable(progressId);
    final Drawable[] old = getCompoundDrawables();
    setCompoundDrawablesWithIntrinsicBounds(old[0], old[1], progress, old[3]);
    setEnabled(false);

    if(progress instanceof Animatable){
        ((Animatable)progress).start();
    }
    setText("");

}

public void stopSpinning()
{
    if(!isSpinning()){
        return;
    }

    if(progress instanceof Animatable){
        ((Animatable)progress).stop();
    }
    setEnabled(true);
    setText(buttonText);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    if (progress != null) {
        final int drawableHeight = progress.getIntrinsicHeight();
        final int drawableWidth = progress.getIntrinsicWidth();
        final int drawableTop = (getHeight() - drawableHeight) / 2;
        final int drawableLeft = (getWidth() - drawableWidth) / 2;
        progress.setBounds(drawableLeft, drawableTop, drawableLeft + drawableWidth, drawableTop + drawableHeight);

        progress.draw(canvas);
    }
}

}

そして、これはタップ後、すべてが私が望むように見える前に短時間表示されます: ここに画像の説明を入力

なぜこれが起こっているのですか?

4

1 に答える 1

0

問題が見つかりました。コードを動作するバージョンに更新しました。

于 2013-02-07T14:28:36.877 に答える