恭喜你成为UI中国推荐设计师 (详情)
//百度统计 20220402 uicn

您的意见是我们 UI 中国进步的动力!
点击立即反馈按钮,发表您的意见!
立即反馈
QQ群反馈
您也可以加入UI中国官方反馈群进行反馈!
群号:302892100
备注:反馈问题后@管理员能让我们及时了解您的意见

提交需求

赛事与广告咨询合作,请填写需求表单,我们会在第一时间与您联系!

0/20
0/200

设计大赛

  • 设计大赛
  • 发布广告
  • 发布招聘
  • 其它需求

提交完成
感谢您对UI中国的支持和信赖!
Android UI设计细节问题(一)
0.0°
2015-07-31 原创文章 经验/观点 原作者: 原作者 举报 6021 22 23 2

安卓ui设计不太好理解,要勇敢面对,别逃避啊,从ios入手的设计师朋友们~~~

距离上一次的安卓ui设计知识分享有很长一段时间了,其实安卓ui设计有很多细节需要注意,我也一直没有时间去整理并发布上来。

今天就先给大家分享一个。

很多设计师喜欢从ios出发进行设计工作,原因是因为ios平台的单位与photoshop的单位统一,不需要去理解单位不同而带来的换算问题。

我很庆幸当年在“少林寺”苦练的时候是从安卓ui设计出师的,所以对安卓方面的研究相对会更加深刻些,个人认为能把安卓设计做好的ui 设计师,ios也不会难倒他;反之就不太好说了。

我听到很多同学说到“对于安卓,我一般都不标注,把源文件,素材拿给程序员,程序员自己去调试适配。”

我想对这类同学说:“要不然整个ui你都别做了,甚至不用上班得了。”

在我看来

第一:标注,切图,甚至是点9图的制作都应该是设计师的工作,因为只有他们最了解设计稿,最清楚布局,最终ui编程的结果是用设计师来做ui review的。

第二:你多学一方面的技术,又怎么滴呢?你还没有成为大神,不是随便画几笔点睛之笔,剩下的就拿给马仔帮你做完吧。你会标注,会切图,会做点9图,甚至懂一点代码,你比其他ui设计师就高逼格一格层级。你妈会知道的。

--------------------不太华丽的分割线---------------------

项目背景:某app的某个活动页面(由于保密协议的规定,我修改了设计稿的部分内容)

设计平台:Android

入手屏幕:720*1280

安卓ui设计师的系列知识在我之前的帖子里有详细的描述,我的站酷链接:www.zcool.com.cn/u/360473 

在这里就不做说明了。

下面有一个页面:

分析设计稿中的素材资源,我们大概分成以下几部分:

切出素材,按照安卓适配的规则,我们只切当前分辨率设计稿中的素材,并放到相应的文件夹中,即可适配当前分辨率的机器,以及当前分辨率以下分辨率的机器:

做好标注工作,标注数值时针对mdpi计算的:

交付给程序员所有文件,也许有的同学已经发现过这样的结果了,最终在各类分辨率机器上看到的是这样的:

产生这个结果的原因是:安卓会根据分辨率相应的倍数关系缩放图片资源,比如mdpi使用的是xhdpi的资源缩小50%,hdpi使用的是xhdpi的资源缩小75%,然而mdpi机器的纵向分辨率 却不是 xhdpi机器纵向分辨率的50%,hdpi机器的纵向分辨率 却不是 xhdpi机器纵向分辨率的75%。而另外一方面,你对于各图片的各类外边距已经设定为了一个最终的固定的值。纵向分辨率的倍数关系 还  赶不上 屏幕的倍数关系。于是就出现来上图的结果。

下图为解释:

解决的办法

1----ui设计解决,不靠别人:

计算纵向分辨率的倍数关系,并为其他分辨率提供素材资源

这样做的结果是,对于每个分辨率的资源文件夹都放置来素材资源(只是尺寸不一样),可想而之,最终的安装文件会因为过多的图片资源而变得非常大,这一点是移动互联网开发的一个禁忌。

好在这样上中下,上中中下,上上中中下下……等布局的页面不会很多,也不会对最终的apk包产生太大的问题。

2----求助万能的程序员gg

很久之前,我意识到这个问题,也一直在用办法1,后来我开始思考,能不能用程序的办法去解决,凭着我对程序的大概了解,思路应该是 程序去读取drawable-xhdpi文件夹中的素材资源,遇到hdpi的机器,或者mdpi的机器,就将这些图片资源缩小相应的倍数(0.38倍,0.63倍),仅仅是一个乘法的计算,应该不会牺牲太大的性能,程序gg一定会同意的。带着这个思路,我去麻烦了程序员写了一个代码段,今后碰到这样的问题,就再也不用麻烦我切那么多图了,so easy~

代码段如下(代码过敏者可直接跳过):

------------

package com.nd.mms.ui;

import android.app.Activity;

import android.content.Context;

import android.graphics.Matrix;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.view.Display;

import android.view.ViewTreeObserver;

import android.view.WindowManager;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.RelativeLayout;

/**

 * 根据分辨率去缩放图片

 * 

 * @author lxl

 * 

 */

public class ScaleImageView extends ImageView implements ViewTreeObserver.OnGlobalLayoutListener {

private final Matrix baseMatrix = new Matrix();

private final Matrix drawMatrix = new Matrix();

private final Matrix suppMatrix = new Matrix();

private boolean isfirst = true;

public ScaleImageView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

nit(context);

}

public ScaleImageView(Context context, AttributeSet attrs) {

super(context, attrs);

init(context);

}

private int screenWidth;

public ScaleImageView(Context context) {

super(context);

init(context);

}

private void init(Context context) {

WindowManager m = ((Activity) context).getWindowManager();

Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用

screenWidth = d.getWidth();

}

/**

* 依据图片宽高比例,设置图像初始缩放等级和位置

*/

public void configPosition() {

isfirst = false;

super.setScaleType(ScaleType.MATRIX);

float scale = 1.0f;

if (screenWidth == 480 || screenWidth == 320 || screenWidth == 240) {// hdpi和mdpi、ldpi

scale = 0.8f;

} else {

return;

}

Drawable d = getDrawable();

if (d == null) {

return;

}

float viewWidth = getWidth();

float viewHeight = getHeight();

// background的区域

if (this.getLayoutParams() instanceof RelativeLayout.LayoutParams) {

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) this.getLayoutParams();

viewWidth = (int) (viewWidth * scale);

viewHeight = (int) (viewHeight * scale);

params.width = (int) viewWidth;

params.height = (int) viewHeight;

this.setLayoutParams(params);

} else if (this.getLayoutParams() instanceof LinearLayout.LayoutParams) {

LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) this.getLayoutParams();

viewWidth = (int) (viewWidth * scale);

viewHeight = (int) (viewHeight * scale);

params.width = (int) viewWidth;

params.height = (int) viewHeight;

this.setLayoutParams(params);

}

// //src的区域

final int drawableWidth = d.getIntrinsicWidth();

final int drawableHeight = d.getIntrinsicHeight();

baseMatrix.reset();

// 缩放

baseMatrix.postScale(scale, scale);

// 移动居中

baseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2, (viewHeight - drawableHeight * scale) / 2);

resetMatrix();

}

/**

* Resets the Matrix back to FIT_CENTER, and then displays it.s

*/

private void resetMatrix() {

if (suppMatrix == null) {

return;

}

suppMatrix.reset();

setImageMatrix(getDisplayMatrix());

}

protected Matrix getDisplayMatrix() {

drawMatrix.set(baseMatrix);

drawMatrix.postConcat(suppMatrix);

return drawMatrix;

}

@Override


public void onGlobalLayout() {

// 调整视图位置

if (isfirst) {

configPosition();

}

}

@Override

protected void onAttachedToWindow() {

super.onAttachedToWindow();

getViewTreeObserver().addOnGlobalLayoutListener(this);

}

@Override

protected void onDetachedFromWindow() {

super.onDetachedFromWindow();

getViewTreeObserver().removeGlobalOnLayoutListener(this);

}

}

-----------

你的团队可以直接使用这段代码,你和程序员只用关注代码中的 “scale = 0.8f;”,当然这是一个最基本的值,你还可以尝试把这个 缩小倍数 调节得更大,那么产生前面问题的可能性就更小。具体的结果,你可以和程序员gg 去慢慢调试。

--------------------不太华丽的分割线---------------------

再回过头去看看设计稿,如果用sketch,这种效果图能很容易的做出来吗?

所以,还是那句话:重要的是想法,用什么工具都是浮云。

我没有在站酷上放作品,我不是什么大神,没有什么惊人之作,我只是一个爱分享,喜欢赞扬别人的默默无闻的设计师罢了,我的作品地址可以问我要,lofter互粉。

更新:2015-07-31

收藏

22人已收藏

chan奕迅

http://www.zcool.com.cn/u/360473

  • 4

    作品

  • 52

    粉丝

  • 20

    关注

  • 安卓UI设计系列知识(二)
  • 安卓UI设计系列知识(一)
  • Sketch 之优秀插件Zeplin讲解
相关标签

    猜你喜欢

      2015-07-31 原创文章 经验/观点 原作者: 原作者 举报 6021 22 23 2

      Android UI设计细节问题(一)

      0.0°

      你确定要举报Android UI设计细节问题(一)

      如果查出恶意举报,十天内禁止提交任何举报申请。

      0/200

      上传证据: 超过10M的附件请使用网盘地址

      点击上传附件

      对谁可见:

      全部设计师
      • 全部设计师
      • 推荐设计师和认证设计师

      您确认要推荐?

      该作品发布时间:2015年07月31日

      评分

      完整度

      启发性

      勤奋性

      排版布局

      推荐心得

      建议20-200字以内

      0/200

      23
      22
      2

      账号或密码错误,请重新输入

      账号或密码错误,请重新输入

      登录

      手机号

      发送验证码 120s 验证码错误

      登录
      第三方账号登录