2014-12-08 95 views
0

我有自定义视图的ListView,我也有一个自定义的ArrayAdapter。我想为我的自定义视图设置背景图像。我知道这是可能的,通过android:background,但是当我做它整个图像(这是1500x1500)被设置为我的ListView项目。我想要裁剪该图像的图像。我的意思是,如果ListView项目是300x80,我希望我的背景图像的300x80部分显示,而不是整个图像缩放。将裁剪的背景图像设置为自定义ListView项目

如果可以通过XML我更喜欢它,但我也可以通过编程来实现。那么,我怎样才能为我的自定义ListView项目设置裁剪后背?

P.S.我选择这种方式的原因是,如果我选择一个小的位图,位图在大屏幕设备中看起来很糟糕,如果我选择大图像,图像将缩放,我不希望它。

+1

xml,'center_crop',doc和这里的'scaleType'属性developer.android.com/reference/android/widget/ImageView.ScaleType.html。你应该使用像'drawables-xhdpi'和其他,'-large'和'-xlarge'这样的命名文件夹来创建不同的尺寸。 – snachmsm 2014-12-08 02:14:27

+0

其实我设置了centerCrop,但图像仍然很大。 – 2014-12-08 02:22:45

回答

1

一个方法是使用scaleTypecenterCrop

或手动裁剪该位图。

int startX = (bitmap.getWidth() > imageView.getWidth()) ? (bitmap.getWidth() - imageView.getWidth())/2 : 0; 
int startY = (bitmap.getHeight() > imageView.getHeight()) ? (bitmap.getHeight() - imageView.getHeight())/2 : 0; 

bitmap = Bitmap.createBitmap(bitmap,     
    startX,   
    startY, 
    (bitmap.getWidth() > imageView.getWidth()) ? imageView.getWidth() : bitmap.getWidth(), 
    (bitmap.getHeight() > imageView.getHeight()) ? imageView.getHeight() : bitmap.getHeight()); 
+0

那么,我应该如何设置到ListView项目的背景?它有setBackground函数,但它期望从资源drawable而不是Bitmap实例。我应该如何在自定义ArrayAdapter的getView函数中设置它? – 2014-12-08 20:16:04

+0

使用BitmapDrawable。 Drawable d = new BitmapDrawable(getResources(),bitmap); – 2014-12-09 03:57:16