0

私のアプリケーションでは、最初は不透明度TextViewを60に設定しています。その後、ユーザーがボタンを押したときに、ボタンを増やすボタンまたは下げるボタンを押すたびに、不透明度を増減したいと思いTextViewます。私はこれを試しましたが、テキストの不透明度を取得するたびに、実際にはそうではない-3または-1が表示されます。

 public void decreaseOpacity(View v){

    int op=txtView.getBackground().getOpacity();// its alwz -ve value
    txtView.getBackground().setAlpha(op-1);

}
4

2 に答える 2

1

このコードを試してください

public class AlphaTextView extends TextView {

  public AlphaTextView(Context context) {
    super(context);
  }

  public AlphaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean onSetAlpha(int alpha) {
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    return true;
  }
}
于 2013-02-26T14:00:25.963 に答える
0

Drawable.getOpacity()は、setAlpha()によって行われた変更を考慮しません。ドキュメントを参照してください

戻り値には、setAlpha(int)またはsetColorFilter(ColorFilter)メソッドを介してクライアントによって適用されたカスタムアルファまたはカラーフィルターは考慮されていないことに注意してください。

次に、アルファ値を変数として格納し、getOpacity()を使用しないようにする必要がある場合があります。

private int mTextViewAlpha = 255;

public void decreaseOpacity(View v){
    if ( mTextViewAlpha-- <= 0 ) mTextViewAlpha = 0;
    txtView.getBackground().setAlpha(mTextViewAlpha);
    txtView.getBackground().invalidateSelf();
}
于 2013-02-26T12:56:36.087 に答える