我遇到了imageView
在左侧屏幕上显示其1440 * 2560
和正确的400 * 800
这也是我的代码xml ImageView
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/tt">
<customfonts.RoundedImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ssz2"
android:scaleType="fitXY"
android:adjustViewBounds="false" />
</RelativeLayout>
这是让我的图像四舍五入的课程
public class RoundedImageView extends ImageView {
public RoundedImageView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public RoundedImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable == null) {
return;
}
if (getWidth() == 0 || getHeight() == 0) {
return;
}
Bitmap b = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
&& drawable instanceof VectorDrawable) {
((VectorDrawable) drawable).draw(canvas);
b = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas();
c.setBitmap(b);
drawable.draw(c);
}
else {
b = ((BitmapDrawable) drawable).getBitmap();
}
Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);
int w = getWidth(), h = getHeight();
Bitmap roundBitmap = getCroppedBitmap(bitmap, w);
canvas.drawBitmap(roundBitmap, 0,0, null);
}
public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) {
Bitmap sbmp;
if(bmp.getWidth() != radius || bmp.getHeight() != radius)
sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false);
else
sbmp = bmp;
Bitmap output = Bitmap.createBitmap(sbmp.getWidth(),
sbmp.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xffa19774;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(Color.parseColor("#BAB399"));
canvas.drawCircle(sbmp.getWidth() / 2+0.7f, sbmp.getHeight() / 2+0.7f,
sbmp.getWidth() / 2+0.1f, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint);
return output;
}
}
并且imageView源大小为75 * 75
如果此imageView在所有设备中都相同,我想制作尺寸
答案 0 :(得分:1)
您遇到的问题是图像的大小与像素大小相同。 但由于屏幕右侧像素的密度较低,因此看起来更大。
您需要做的是将屏幕的像素和密度考虑在内。
Google正在使用dp来确保即使设备之间的屏幕不同,视图看起来也是一样的。
有不同的方法可以解决这个问题,但我认为你想在画布上绘制之前将大小从像素转换为dp。
答案 1 :(得分:0)
您使用
android:layout_width="wrap_content"
android:layout_height="wrap_content"
如果您想使用固定尺寸
android:layout_width="75dp"
android:layout_height="75dp"
但我建议你不要。
详细了解密度独立性https://developer.android.com/guide/practices/screens_support.html#density-independence
答案 2 :(得分:0)
问题是您的ImageView尺寸设置为“wrap_content”,并且您的内容(图像源)尺寸是使用像素确定的。在屏幕较小且设备较少的设备上,这75个像素看起来会相对较大。
您应该将ImageView设置为具有固定的dp大小,例如:
android:layout_width="50dp"
android:layout_height="50dp"
你可以使用这样的计算器:https://pixplicity.com/dp-px-converter/来获得正确的密度像素尺寸。
答案 3 :(得分:0)
要支持所有屏幕设备,您必须创建具有不同尺寸的多个副本。
res/drawable-mdpi/graphic.png // bitmap for medium-density
res/drawable-hdpi/graphic.png // bitmap for high-density
res/drawable-xhdpi/graphic.png // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png // bitmap for extra-extra-high-density