2011-08-21 91 views
0

我正在扩展ImageView以手动缩放视图内的图像。我想缩放图像以填充自定义视图的宽度,然后将其绘制到画布上,但是,我无法使用this.getWidth() 它只返回0,因为视图尚未绘制等具有0.自定义ImageView内缩放图像

目前尺寸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)
的观点尚未制定,我怎么会去缩放图像,以填补在这一点上的看法/屏幕宽度?

在此先感谢。

回答

1

我相信你想要做的也可以通过使用ImageView直接结合scaleType属性来实现。请使用fitXYcenterCrop,具体取决于您的需求。

但是要回答这个问题,只能在layout()被调用后使用getWidth()和getHeight()。所以你应该能够使用你的onDraw方法中的值。

你也可以使用另一个drawBitmap方法,所以你不必在内存中创建一个新的位图。