???????????????????????????????????????????????? ^
? ImageView ???????????????? ? |
? ? ? ? |
? ? Actual image ? ? |
? ? ? ? |60px height of ImageView
? ? ? ? |
? ? ? ? |
? ???????????????? ? |
????????????????????????????????????????????????
<------------------------------------------------>
90px width of ImageView
Run Code Online (Sandbox Code Playgroud)
我有一个默认高度和宽度的图像视图,图像存储在数据库中,我想根据Imageview高度宽度缩放图像.因为我不希望它给出默认值,因为当我改变它的高度和宽度时我也必须在代码中更改它.
我试图获得ImageView的高度和宽度,但在两种情况下都返回0.
int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();
Run Code Online (Sandbox Code Playgroud)
即使它有默认的高度和宽度,这也会返回0
我有一个垂直的LinearLayout,其中一个项目是ImageView使用Picasso加载的.我需要将图像的宽度提升到整个设备宽度,并显示图像的中心部分被固定高度(150dp)裁剪.我目前有以下代码:
Picasso.with(getActivity())
.load(imageUrl)
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resize(screenWidth, imageHeight)
.centerInside()
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
我应该把哪个值成screenWidth和imageHeight(= 150dp)?
我创建了一个带有标题图像的活动.此标头图像最初使用ImageView在Activity的布局xml中创建,其中scaleType设置为centerCrop.这就是我想要的,它使图像居中,在纵向模式下左右剪切,以横向模式显示所有图像.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="30dp"
android:paddingBottom="6dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:background="#919EAC"
android:orientation="vertical" >
<ImageView
android:id="@+id/header_image"
android:layout_width="match_parent"
android:layout_height="120dp"
android:contentDescription="@string/header_description"
android:scaleType="centerCrop"
android:src="@drawable/header" />
.... <other views> ...
Run Code Online (Sandbox Code Playgroud)
我想用可绘制的背景替换它,以便我可以使用标题图像空间来显示数据,这样可以节省我在不同活动中重复相同的布局.
出于这个原因,我创建了一个drawable,我可以在android:background属性中引用:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#919EAC" />
</shape>
</item>
<item>
<bitmap
android:antialias="true"
android:gravity="top|center_horizontal"
android:src="@drawable/header" />
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
此drawable定义了布局将定义的彩色背景,并定义了一个标题图像,否则将作为ImageView包含在布局中.
然而,现在我的图像缩放,而我希望它被裁剪.
检查Android文档我尝试了其他重力模式,如
android:gravity="top|clip_horizontal"
Run Code Online (Sandbox Code Playgroud)
但它似乎仍然显示/缩放与图像视图不同.
背景可绘制的正确定义是什么?
我正在尝试裁剪图像,然后绕过角落,使其在屏幕上看起来更漂亮.
我能够做的是围绕图像的角落,但裁剪有时会切断图像的两侧(取决于图像的大小/纵横比).
所以我想做的是执行裁剪,然后应用圆角.我怎样才能做到这一点?
围绕图像的角落:
private Bitmap getRoundedCornerBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff000000;
final Paint paint = new Paint();
final Rect rect = new Rect(0,0,bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
final float roundpx = 20;
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, roundpx, roundpx, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
return output;
}
Run Code Online (Sandbox Code Playgroud)
然后我像这样设置imageview的scaletype: imageView.setScaleType(ScaleType.CENTER_CROP)