Изменить размер Drawable в Android
Я устанавливаю ярлык для диалога прогресса (pbarDialog
), но моя проблема заключается в том, что я хочу каждый раз изменять размер чертежа, но не могу понять, как это сделать.
Вот какой код:
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();
Ответы
Ответ 1
Следующие работали для меня:
private Drawable resize(Drawable image) {
Bitmap b = ((BitmapDrawable)image).getBitmap();
Bitmap bitmapResized = Bitmap.createScaledBitmap(b, 50, 50, false);
return new BitmapDrawable(getResources(), bitmapResized);
}
Ответ 2
Здесь, где я закончил, спасибо частично Сааду:
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;
}
Ответ 3
Для изменения размера это красиво и коротко (код выше не работал у меня), нашел здесь:
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);
Ответ 4
Возможно, мое решение покрывает вопрос не полностью, но мне нужно что-то вроде "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 shown inside a ListView
viewHolder.mIvIcon.addView(iv);
Вот кадр, который показывает значок внутри строки ListView:
<FrameLayout
android:id="@+id/iv_card_icon"
android:layout_width="48dp"
android:layout_height="48dp"
android:src="@drawable/circle"
android:layout_marginStart="16dp"
/>
Смотрите это решение как вариант/идею.