0

ScaleDrawable() を使用すると、構文エラーが発生します。私は何か間違ったことをしているに違いない。何か案は?

2 つのエラーは、完全には修正できません。

これは私が現時点で持っているものです:

protected class testbuttonBackgroundDrawable extends LayerDrawable {
/** my aim - the image used as background for the custom view is increased in
 *size by 25percent and then a yellow color filter is attached to it.
 *This yellow image then has the original background image layered on top of it
 *to create the effect of the image having a glow around it
 *I want to use this later on for when the custom button has focus
 */     
    ColorFilter colourFilter = new LightingColorFilter(Color.YELLOW, 1);

    ScaleDrawable resizedImage = new ScaleDrawable(background, 0, 1.25f, 1.25f);*

* ここにエラーがあります - トークン ";" の構文エラー、{ このトークンの後にあると予想されます

    nD = resizedImage.getDrawable();
    nD.setColorFilter(colourFilter);

    Drawable[] aD = new Drawable[2];
    aD[0] = nD;
    aD[1] = background;
    LayerDrawable _highlightedDrawable = new LayerDrawable(aD);

//This will make the background image fade if the button is set to disabled
    protected int _disabledAlpha = 100;
/**This is another scale drawable, this time used to shrink the background image of
 *the custom button when it is pressed
 */
    protected ScaleDrawable _pressedDrawable = new ScaleDrawable(background, 0, 0.75f, 0.75f);*

* ここでのエラーは - 「構文エラーです。「}」を挿入してブロックを完成させてください」

    public testbuttonBackgroundDrawable(Drawable d) {
          super(new Drawable[] { d });
    }

    @Override
    protected boolean onStateChange(int[] states) {
      boolean enabled = false;
      boolean highlighted = false;
      boolean pressed = false;

      for (int state : states) {
        if (state == android.R.attr.state_enabled)
            enabled = true;
        else if (state == android.R.attr.state_selected)
            highlighted = true;
        else if (state == android.R.attr.state_pressed)
            pressed = true;
      }

      mutate();
      if (enabled && highlighted) {
        setBackgroundDrawable(_highlightedDrawable); // buttons need transparent backgrounds
      } else if (!enabled) {
        setColorFilter(null);
        setAlpha(_disabledAlpha);
      } else if (enabled && pressed){
        setBackgroundDrawable(_pressedDrawable);
      } else {
        setColorFilter(null);
      }

      invalidateSelf();

      return super.onStateChange(states);
    }

}

}

エラーを修正するための助けをいただければ幸いです。

ScaleDrawable コンストラクターを適切に使用していないと思います。

これを正しく行うにはどうすればよいですか?

それが問題でない場合は、どんな助けもいただければ幸いです。

4

1 に答える 1

0

修正しました!

問題は、レイヤー ドローアブル クラスの間違ったセクションでボタンの状態の計算を行っていたことです。これは修正されています:

protected class CustomImageButtonBackgroundDrawable extends LayerDrawable { 

    protected Drawable lowerlayer;
    protected Drawable _highlightedDrawable;

    protected int _disabledAlpha = 100;
    protected Drawable _pressedDrawable;


    public CustomImageButtonBackgroundDrawable(Drawable d) {
          super(new Drawable[] { d });
    }

    @Override
    protected boolean onStateChange(int[] states) {
      boolean enabled = false;
      boolean highlighted = false;
      boolean pressed = false;

      for (int state : states) {
        if (state == android.R.attr.state_enabled)
            enabled = true;
        else if (state == android.R.attr.state_selected)
            highlighted = true;
        else if (state == android.R.attr.state_pressed)
            pressed = true;
      }

      mutate();
      if (enabled && highlighted) {
        ColorFilter colourFilter = new LightingColorFilter(Color.YELLOW, 1);
        ScaleDrawable resizedImage = new ScaleDrawable(background, 0, 1.25f, 1.25f);

        lowerlayer = resizedImage.getDrawable();
        lowerlayer.setColorFilter(colourFilter);

        Drawable[] aD = new Drawable[2];
        aD[0] = lowerlayer;
        aD[1] = background;
        LayerDrawable _highlightedDrawable = new LayerDrawable(aD);

        setBackgroundDrawable(_highlightedDrawable); // buttons need transparent backgrounds

      } else if (!enabled) {
        setColorFilter(null);
        setAlpha(_disabledAlpha);

      } else if (enabled && pressed){
        ScaleDrawable smaller = new ScaleDrawable(background, 0, 0.75f, 0.75f);

        setBackgroundDrawable(smaller.getDrawable());

      } else {
        setColorFilter(null);
      }

      invalidateSelf();

      return super.onStateChange(states);
    }

}
于 2012-05-01T23:42:21.520 に答える