我正在扩展ImageView,以便在视图中手动缩放图像。我想缩放图像以填充自定义视图的宽度,然后将其绘制到画布,但是,我无法使用this.getWidth()
获取视图宽度
它只返回0,因为视图尚未绘制,因此维度0为0。
目前我的main.xml中有以下内容:
<com.android.myapp.BackgroundView
android:id="@+id/background_view"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:src="@drawable/background"
android:dither="true"
/>
自定义类如下:
public class BackgroundView extends ImageView {
private Paint paint;
private Bitmap background;
public BackgroundView(Context context) {
super(context);
paint = new Paint();
loadBitmap();
}
public BackgroundView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
loadBitmap();
}
public void loadBitmap() {
BitmapDrawable src = (BitmapDrawable) this.getDrawable();
background = src.getBitmap();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(background, 0, 0, paint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
我的Main.java类是:
public class Main extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
我不能用左
Bitmap.createScaledBitmap(background, view.getWidth(), view.getHeight(), false)
由于视图尚未绘制,我如何在此时缩放图像以填充视图/屏幕宽度?
提前致谢。
答案 0 :(得分:1)
我相信您想要做的事情也可以通过将ImageView直接与scaleType属性结合使用来实现。根据您的需要,使用 fitXY 或 centerCrop 。
但是要回答这个问题,你只能在调用layout()之后使用getWidth()和getHeight()。因此,您应该能够使用onDraw方法中的值。
此外,您可以使用其他drawBitmap方法,这样您就不必在内存中创建新的位图。