Android-如何实现大分辨率的图片等比例缩放,使其适配不同的手机

Android-如何实现大分辨率的图片等比例缩放,使其适配不同的手机

夜无邪 发布于 2017-10-11 字数 225 浏览 1072 回复 4

android原生开发,可以做一套大分辩率的图片,让他比例缩放使其适配不同的手机吗?
要求不能失真,可以做得到吗?具体的解决方案怎么样

==========================
怎么还是要分各种分辩率的文件夹呢?可以不用嘛?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浮生未歇 2017-10-27 4 楼

1.屏幕大小
在res目录下创建不同的layout文件夹,比如:layout-640x360layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
2.字体自适应大小
首先根据不同分辨率获取不同字体大小。
在RES里创建
values-480x320/strings.xml 里面设置 <dimen name="Text_size">30px</dimen>
values-800x400/strings.xml 里面设置 <dimen name="Text_size">30px</dimen>
分别代表480X320 和 800X400分辨率情况下 字号为30px和40px;
在java文件中这样调用:

int sizeOfText = (int) this.getResources().getDimension(R.dimen.Text_size);

3.背景的适配(图片缩放)

//背景缩放
         public static final float scalX = view.screenW;//屏宽
    public static final float scalY = view.screenH;//屏高

    //等比例缩放
    public static Bitmap adaptive(Bitmap bitmap) {
        Matrix matrix = new Matrix();
        int width = bitmap.getWidth();// 获取资源位图的宽
        int height = bitmap.getHeight();// 获取资源位图的高
        float w = scalX / bitmap.getWidth();
        float h = scalY / bitmap.getHeight();
        matrix.postScale(w, h);// 获取缩放比例
                    // 根据缩放比例获取新的位图
        Bitmap newbmp = Bitmap.createBitmap(bitmap, 0, 0, width, height,matrix, true);
        return newbmp;  
    }

你可以不用各种分辩率的文件夹,那你就获取屏的宽高呗,然后做判断,用百分比

虐人心 2017-10-26 3 楼

1.使用wrap_content, fill_parent 和使用dip作为像素单位in XML layout files。
2.避免使用AbsoluteLayout
3.在代码中,不要使用像素数字硬编码,而是要通过dip转换为px。
例子:
你使用手势分析器分析一个scroll手势,假如,你滚动的距离是16px。
1.在一个160dip的屏幕中,你实际移动距离 16px / 160dpi = 1/10th of an inch (or 2.5 mm)
2.在一个240dip的屏幕中,你实际移动距离 16px / 240dpi = 1/15th of an inch (or 1.7 mm)
// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;
// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale);
4.使用密度和/或尺寸特定资源(通过文件夹)

浮生未歇 2017-10-19 2 楼

不会失真呀,可以用Martix进行修改大小呀,直接用Bitmap里的方法也可以的

甜柠檬 2017-10-16 1 楼

一、/* 加载资源 */
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.me); 或mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.myicon)).getBitmap();

二、通过键盘去放大缩小,通过添加按钮区控制。

三、通过对代码的比较,显然易见,MVC的代码更清楚,但是用硬编码有硬编码的好处,硬代码编程运行时可以加快调用速度,而MVC会增加内存。

四、在Android中不允许ImageView在产生后,动态修改其长度和宽度,所以为了实现图片放大缩小功能,使用的方式是当用户在单击放大或缩小的按钮时,除了将图片作放大或缩小的动作外,并将原来Layout中ImageView删除,重新产生一个新的ImageView,指定图片给它后,再放入Layout里,用户看来,就好像同一张图片再放大或缩小。