我设置了一个进度对话框( pbarDialog )的drawable,但我的问题是我想每次调整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();
以下为我工作:
private Drawable resize(Drawable image) { Bitmap b = ((BitmapDrawable)image).getBitmap(); Bitmap bitmapResized = Bitmap.createScaledBitmap(b, 50, 50, false); return new BitmapDrawable(getResources(), bitmapResized); }
这就是我最后的结局,部分归功于Saad的回答:
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; }
对于resize,这是好的和短(上面的代码不适合我),在这里find:
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);
也许我的解决scheme不是完全覆盖问题,但我需要像“CustomDrawable”的东西。
换句话说,我想在圆形前面设置一个标志。 所以我创build了一个带有背景的FrameLayout(只是一个彩色圆圈),在这个圆形前面我展示了这个标志。
要调整徽标的大小,我通过缩放缩小徽标 – 这是一些代码:
iv = new ImageView(mContext); iv.setScaleX(0.75f); //
这是显示ListView行内图标的FrameLayout:
看到这个解决scheme作为一个选项/想法。