我尝试实现我自己的drawable,它将从一个简单的彩色矩形(应该与drawable所在的ImageView具有相同的大小)到加载的位图(通过http)。
所以我要做的是覆盖我的 Drawable 的 draw() 方法:
public void draw(Canvas canvas) {
boolean done = true;
Log.d("Test",
"canvas w: " + canvas.getWidth() + " " + canvas.getHeight());
final int alpha = mAlpha;
final boolean crossFade = mCrossFade;
Paint paint = mStartPaint;
paint.setColor(blueColor);
if (!crossFade || 255 - alpha > 0) {
if (crossFade) {
paint.setAlpha(255 - alpha);
}
// Draw the rect with the color
canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
if (crossFade) {
paint.setAlpha(0xFF);
}
}
if (alpha > 0) {
Bitmap bitmap = mEnd;
paint = mEndPaint;
paint.setAlpha(alpha);
if (mBitmapScalingType == null)
canvas.drawBitmap(bitmap, mEndX, mEndY, paint);
else
mBitmapScalingType.draw(bitmap, canvas.getWidth(),
canvas.getHeight(), canvas, paint);
paint.setAlpha(0xFF);
}
if (!done) {
mHandler.post(mInvalidater);
}
}
所以 canvas.getWidth() 和 canvas.getHeight() 返回 128(宽度)和 150(高度),这与 ImageView 相同。但结果是:
蓝色矩形尚未绘制在整个画布上,我不知道为什么。
显示我的可褪色可绘制对象的 ImageView 没有设置特定的比例类型。
有什么想法可能是错的吗?
我还注意到从 setBounds() 计算的宽度和高度是 180 x 212 px
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
final int width = right - left;
final int height = bottom - top;
Log.d("Test", "width: "+width+" height: "+height);
}
如果我用 180 x 212 像素绘制颜色
canvas.drawRect(0, 0, 180, 212, paint);
现在绘制矩形以完全填充画布。
知道有什么问题吗?
顺便提一句。ImageView 是这样定义的:
<ImageView android:id="@+id/playerPic"
android:layout_width="64dp"
android:layout_height="75dp"
android:layout_marginRight="10dp"
/>
在 xhdpi 中 64dp = 128px 和 75dp = 150 px