2011-11-09 7 views
1

ビットマップフィールドを持つカスタムオブジェクトを作成しました。これらのオブジェクトのいくつかを、ビューのキャンバスに描画して、スクロールする水平イメージギャラリを模倣しています。ビットマップに不透明度を設定するにはどうすればよいですか?

ユーザーが長い間画像の1つを押すと、残りのビットマップの不透明度を指定された割合に変更します。これは、「編集モード」で暗くなっているという印象を与えたり、正常に戻ったことを意味する可能性があります。 (ビットマップを永久に変更したくないので、その場で不透明度を調整できるようにしたい)。不透明度の変更について私は私のビットマップが変更可能であり、途中でアルファを持っていることを確認しました。私は間違って何をしていますか?また、(

{ 
img.setOpacity(50); 
invalidate(); 
} 

ImageStoryEdit:(簡潔にするために簡略)

ターゲットのAndroid 2.1、APIレベル7

ビュー:長押しで行わ

public class CanvasStoryEdit2 extends View 
{ 

    public CanvasStoryEdit2(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     for (int i = 0; i < getResources().getInteger(R.integer.maxAllowedSlides); i++) 
     { 

      ImageStoryEdit img = new ImageStoryEdit(); 

      //test images 
      if (i == 0) { resource = R.drawable.a1; } 
      else if (i == 1) { resource = R.drawable.a2; } 
      else if (i == 2) { resource = R.drawable.a3; } 
      else if (i == 3) { resource = R.drawable.a4; } 
      else if (i == 4) { resource = R.drawable.a5; } 

      Bitmap bmp = BitmapFactory.decodeResource(getResources(), resource); 

      Log.d("TEST", "[" + Integer.toString(i) + "] - config: " + bmp.getConfig().toString()); 
      Log.d("TEST", "[" + Integer.toString(i) + "] - hasAlpha: " + Boolean.toString(bmp.hasAlpha())); 
      Log.d("TEST", "[" + Integer.toString(i) + "] - isMutable: " + Boolean.toString(bmp.isMutable())); 

      final int imgHeight = bmp.getHeight()/(bmp.getWidth()/imgWidth); 

      bmp = Bitmap.createScaledBitmap(bmp, imgWidth, imgHeight, false); 

      Log.d("TEST", "[" + Integer.toString(i) + "] - config: " + bmp.getConfig().toString()); 
      Log.d("TEST", "[" + Integer.toString(i) + "] - hasAlpha: " + Boolean.toString(bmp.hasAlpha())); 
      Log.d("TEST", "[" + Integer.toString(i) + "] - isMutable: " + Boolean.toString(bmp.isMutable())); 

      int width = bmp.getWidth(); 
      int height = bmp.getHeight(); 

      int[] pixels = new int[width * height]; 

      bmp.getPixels(pixels, 0, width, 0, 0, width, height); 

      bmp.recycle(); 
      bmp = null; 

      img.setBmp(Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)); 
      img.getBmp().setPixels(pixels, 0, width, 0, 0, width, height); 

      pixels = null; 

      Log.d("TEST", "[" + Integer.toString(i) + "] - config: " + img.getBmp().getConfig().toString()); 
      Log.d("TEST", "[" + Integer.toString(i) + "] - hasAlpha: " + Boolean.toString(img.getBmp().hasAlpha())); 
      Log.d("TEST", "[" + Integer.toString(i) + "] - isMutable: " + Boolean.toString(img.getBmp().isMutable())); 

      imageStoryEditList.add(img); 

     } 

    } 

コール要約):

public class ImageStoryEdit 
{ 

    private int opacity; 
    public Bitmap bmp; 


    public Bitmap getBmp() { 
     return bmp; 
    } 

    public void setBmp(Bitmap bmp) 
    { 

     this.bmp = bmp; 

     UpdateRectF(); 

    } 

    public int getOpacity() 
    { 
     return opacity; 

    } 

    public void setOpacity(int percent) 
    { 

     //ADJUST FOR RANGE OF 0-100% 
     percent = percent < 0 ? 0 : percent; 
     percent = percent > 100 ? 100 : percent; 

     this.opacity = percent; 

     int opacity = (int) (this.opacity * 2.55); 

     Log.d("TEST", "OPACITY = " + Integer.toString(percent) + " : " + Integer.toString(opacity)); 

     adjustOpacity(opacity); 

    } 

    private void adjustOpacity(int opacity) 
    { 

     Log.d("TEST", "OPACITY = " + Integer.toString(opacity)); 
     Log.d("TEST", this.bmp.getConfig().toString()); 
     Log.d("TEST", "hasAlpha: " + Boolean.toString(this.bmp.hasAlpha())); 
     Log.d("TEST", "isMutable: " + Boolean.toString(this.bmp.isMutable())); 

     Bitmap bmp2 = this.bmp.copy(Config.ARGB_8888, true); 

     Canvas canvas = new Canvas(bmp2); 

     Paint paint = new Paint(); 

     paint.setAlpha(opacity); 

     canvas.drawBitmap(bmp2, 0, 0, paint); 

     this.bmp = bmp2; 

     Log.d("TEST", this.bmp.getConfig().toString()); 
     Log.d("TEST", "hasAlpha: " + Boolean.toString(this.bmp.hasAlpha())); 
     Log.d("TEST", "isMutable: " + Boolean.toString(this.bmp.isMutable())); 
     Log.d("TEST", "DONE"); 

    } 

} 

答えて

0

私は自分自身でこのことを考え出したと思いますが、誰かがさらに洞察力を提供できればフィードバックを歓迎します。

BitmapDrawableを使用することで、私が望むことができました。これは、ビットマップのラッパーです。ビットマップ自体を編集することは、確かに永続的です。 BitmapDrawablesを使用すると、基になるビットマップに直接影響することなく、特定のパラメータを変更できます。

関連する問題