2011-08-11 8 views
27

進捗ダイアログ(pbarDialog)のドローラブルを設定していますが、私の問題はそのたびにドロウアブルのサイズを変更したいのですが、その方法はわかりません。ここでAndroidでDrawableをサイズ変更する

はいくつかのコードです:

Handler progressHandler = new Handler() { 

    public void handleMessage(Message msg) { 
     switch (msg.what) { 
      // some more code 
      case UPDATE_PBAR: 
       pbarDialog.setIcon(mAppIcon); 
       pbarDialog.setMessage(mPbarMsg); 
       pbarDialog.incrementProgressBy(mIncrement+1); 
       break; 
     } 
    } 
}; 

pbarDialog.show(); 

Thread myThread = new Thread(new Runnable() { 

    public void run() { 
     // some code 
     for (int i = 0; i < mApps.size(); i++) { 
      mAppIcon = mAdapter.getIcons().get(mApps.get(i).getPackageName()); 
      // need to resize drawable here 
      progressHandler.sendEmptyMessage(UPDATE_PBAR); 
     } 
     handler.sendEmptyMessage(DISMISS_PBAR); 
    } 

}); 

myThread.start(); 
+0

あなたはサイズ変更が必要ですか? –

+2

Bitmap.createScaledBitmap(src、dstWidth、dstHeight、filter)を使用 – Sameer

答えて

74

私のために働いた次:私が終わったところ

private Drawable resize(Drawable image) { 
    Bitmap b = ((BitmapDrawable)image).getBitmap(); 
    Bitmap bitmapResized = Bitmap.createScaledBitmap(b, 50, 50, false); 
    return new BitmapDrawable(getResources(), bitmapResized); 
} 
+1

このエラーは、コードの最初の行で取得しました。java.lang.ClassCastException:android.graphics.drawable.PictureDrawableをandroid.graphics.drawable.BitmapDrawableにキャストできません –

+4

引数としてDrawableを使用し、それをBitmapDrawableにキャストします。もしあなたが常にBitmapDrawableであると確信しているならば、引数型をBitmapDrawableにも変更してください。もしそうでなければ、キャストする前に描画可能な型をチェックするのはいいかもしれません。 –

18

はここサアドの答えに一部のおかげで、です:については

public Drawable scaleImage (Drawable image, float scaleFactor) { 

    if ((image == null) || !(image instanceof BitmapDrawable)) { 
     return image; 
    } 

    Bitmap b = ((BitmapDrawable)image).getBitmap(); 

    int sizeX = Math.round(image.getIntrinsicWidth() * scaleFactor); 
    int sizeY = Math.round(image.getIntrinsicHeight() * scaleFactor); 

    Bitmap bitmapResized = Bitmap.createScaledBitmap(b, sizeX, sizeY, false); 

    image = new BitmapDrawable(getResources(), bitmapResized); 

    return image; 

} 
+0

完璧な、これは私が取ったパスです。 – Tony

+0

ニースコーディング。正確に私が必要としたもの。ありがとう、弟: –

+0

これに注意してください:以前のdrawable "image"にはリサイクルされていないビットマップが含まれています。 "image = scaleImage(image、2)"を呼び出すと、一時的なリークが発生します。scaleImageの呼び出し元は、元の画像とスケーリングされた画像の両方をリサイクルする責任があります。これは小さなアプリでは問題にはならないかもしれませんが、メモリを大量に消費するアプリケーションでは重要です。 –

5

サイズ変更、これは素敵で短いです(上のコードは私のために働いていませんでした)、見つけたhere

ImageView iv = (ImageView) findViewById(R.id.imageView); 
    Bitmap bMap = BitmapFactory.decodeResource(getResources(), R.drawable.picture); 
    Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap, newWidth, newHeight, true); 
    iv.setImageBitmap(bMapScaled); 
+0

これは、ImageBitmapとしてImageViewに設定する前にDrawableのサイズを変更したいときに機能しました。どうも –

1

おそらく、私の解決策は完全には問題ではありませんが、私は「CustomDrawable」のようなものが必要でした。

つまり、丸形の前にロゴを設定したいと思います。そこで背景(ちょうど色のついた円)を持つFrameLayoutを作成し、この円形の前にロゴを表示します。私はをスケーリングして、ロゴを縮小ロゴのサイズを変更するには

- ここではいくつかのコードです:ここでは

iv = new ImageView(mContext); 

iv.setScaleX(0.75f); // <- resized by scaling 
iv.setScaleY(0.75f); 

// loading the drawable from a getter (replace this with any drawable) 
Drawable drawable = ML.loadIcon(mContext, Integer.parseInt(icon)); 

iv.setImageDrawable(drawable); 

// icon get's shown inside a ListView 
viewHolder.mIvIcon.addView(iv); 

は、リストビューの行の内部アイコンを示しているでframeLayoutです:

<FrameLayout 
    android:id="@+id/iv_card_icon" 
    android:layout_width="48dp" 
    android:layout_height="48dp" 
    android:src="@drawable/circle" 
    android:layout_marginStart="16dp" 
    /> 

はこれを参照してください。オプション/アイデアとしてのソリューション

関連する問題