建材秒知道
登录
建材号 > 设计 > 正文

干货

专注的小蝴蝶
兴奋的裙子
2023-02-17 13:18:54

【干货】作为设计师,你可知道侠义的工具类产品怎么分?

最佳答案
危机的月亮
粗暴的微笑
2026-05-11 14:21:45

一,工具类的产品分为广义和侠义。

二:广义工具产品通常用更为准确的词汇来描述这些细分特征.如“社交”“电商”等

三:纯工具类产品特征具备两个单一.解决需求单一和实现路径单一。

工具类产品讲究两个方面 1,可用性:信息识别度 空间体验...2,美感:图标美感、比例,配色和谐考究,字号 层次 字号...

广义类工具类产品。 他们有更精准词汇来描述,如“社交”“电商”“社区”“新闻”等属性关键词更能概括产品特性。比如:微信拥有社交关系,生活支付,购物消费,游戏等,就不只是通讯工具。微博有发表微博,视频直播,游戏中心...也不只是笔记工具。

侠义类工具产品:解决需求单一,实现路径单一。 如美图秀秀:专门用来美化照片/墨迹天气:专门用来查看天气/印象笔记专门用来记录笔记。实现路径单一的意思是用户与APP交互单线就可以完成目标。如石墨文档:在产品里就能完成文档/有道云笔记在产品里就能记好笔记/Xmind在产品里就能理清脑图...路径不单一如美团不但在APP上操作,还需要去规定场地使用。

侠义类工具例子:有道云笔记。解决需求单一:方便用户记录。实现路径单一:实现路径是服务方决定的,使用场景只有在这个APP中。

导航架构上的简洁:

1,导航构架上的简洁有助于快速的理解产品。2,注意不同层级的优先关系,使用最合理的层次来引导用户使用。采用 模块化设计,隐藏相似功能。 功能上简洁:一级导航上就能找到需要的/相似的功能,操作归纳,颜色深浅做选择与否。例子:石墨

视觉层次上的简洁:

1,尽量少用多种元素来组合,避免页面更加复杂。2,重复使用某种设计手法,达到统一且富有韵律感。 使用卡片来区分内容,使用线条来分割信息,通过字号和颜色区分, 文字识别先达到。

页面信息上的简洁:

1,把用户最想看见的内容放在首屏;2,学会隐藏,把大段的内容精简;3,简洁的同时要保证内容可识别。 产品的定位决定信息排布:没有标题(EverMemo),只保留标题(锤子便签),保留标题+两行内容(朋友圈)(例子:搜狐)

1,优先考虑功能的理解度和识别度。2,其次考虑视觉美感,最后平衡两者。 展示方式:图标,图标+文字,文字(例子 mac邮箱的发送与QQ邮箱的发送)

预见:预见下一步的操作,提升使用效率

苹果发送图片默认最新的图,发送邮件推荐最近的联系人

填充:默认项的填充,减少用户重复操作。

举例:谷歌浏览器的默认复制功能,有道云笔记与石墨提示之前的登入账户,滴答清单的默认时间段选项,锤子日历常用的事件。

转移:通过动画动效,转移用户注意力,减缓心理上的等待时间。 1,加载动画告诉用户目前的状态。2,通过有趣的动画来转移用户的注意力,减缓等待的时间。

引导: 1,引导能减少用户对产品的距离感;2,引导能有助于用户快速使用功能;3,聪明的引导帮助用户快捷完成任务。 新功能引导(第一次打开APP,专门的帮助引导中心。)智能引导:

儿童类产品-安全亲和,文艺类-复古韵味,工具类产品-效率简洁,女性时尚类产品-纤瘦轻盈。

工具类的字体常用英文Helvetica(非衬线文字),Arial(非衬线文字);中文 宋体(衬线文字),微软雅黑(非衬线文字)

通常情况下,为了更好的兼容性,产品优先选择系统自带字体: IOS使用的中文是苹方简体(ios9以后),华文细黑(ios8以前),英文是San Francisco,三类文字都是非衬线文字。例子:锤子便签、印象笔记、滴答清单、网易有钱。

安卓APP选择的中英文字体分别是思源黑体和Roboto。

当产品有自己强烈风格倾向的时候,要选择符合自己产品定位和调性的字体。如文悦古体。

WINDIW是微软雅黑。当设计的字体用户电脑里没有的话,最后的视觉效果会有偏差。这两种字体的识别性和普及型都很高。

为什么优先选择系统自带字体:

1,设计的产品最终是呈现在用户的终端上的,要考虑用户的使用环境。

2,字体缺少情况下、行距、会替换成其他默认字体,影响内容的排版。

3,系统默认字体经过时间的考验,在识别性和阅读体验方面都比较好。

新手误区:1,喜欢用自己喜欢的字体设计所有的产品;2,没有分析归纳需求,到底合适哪种字体。3,没有考虑所使用字体的实现性。

如何选择颜色,例子 邮件类产品怎么都用蓝色呢?

1,工作时的状态,邮件的使用的时候是在认真,比较严肃的工作状态下。

2,从色彩心理学上讲蓝色是和平、宁静、理性的颜色,也是IT的行业色。

既然邮件类产品都是蓝色,为什么网易邮箱是红色呢?

从品牌的延续性去考虑就会发现这个颜色是品牌延续,看到这个红色会联想到网易红,所以选了红色而不是蓝色。但里面的界面还是蓝色为主色调。

锤子便签是拟物化设计,所以选色时用了真实世界中便签色。淘宝除了橙黄这个品牌色外还使用了色换上各种色系,来表示玲琅满目的购买氛围。有道云笔记是冷静理智的书写,所以用了冷色调中的色系。

1,产品定位和使用场景决定颜色的选择。

2,品牌的延续性对颜色的选择也有影响。

3,避免选择影响用户情绪的颜色(比如大红大紫)

4,选择颜色的目的从功能性出发,减少视觉干扰,提高工具产品效率。

举例:网易邮箱

白色:蓝色:其他颜色约6:3:1

例子:有道云笔记

白色:蓝色:其他颜色约是6;3;1

举例:淘宝

效率优先原则:减少色相-减少视觉干扰-突出内容

1,工具类产品的配色更克制

2,首先符合自己的产品定位

3,效率优先原则

2B产品配图

2C产品配图:直接选择产品里含有重要界面来当配图

1,选取产品界面来配图,是展示产品特点最直接的方式。

2,让浏览的用户对你的产品一目了然。

Blibli vs 网易邮箱

Blibli的颜色比较丰富,圆角比较多。有一定的情感性,比较Q,二次元。网易邮箱大师色彩较少,多用直角,比较中性。

1,图标在工具类产品中并没有表现出和其他产品有显著的差别。

2,但通常不会使用偏“可爱”风格的图标。

图标一般会使用线、面、线面等多种形式结合的形式。1,通常不会使用偏“可爱”风格的图标,2,细节越多,图标的直观表现力越弱;细节少,图标的直观表现力得到提升。

最新回答
神勇的寒风
激情的电灯胆
2026-05-11 14:21:45

一、UI设计插件

用于XD 的插画插件 unDraw

我想绝大多数的同学已经开始用上了这套素质非常高的在线插画工具了。unDraw 的素质相当过硬,如今它更新了最新的 XD 版的插件,使用 XD 设计 UI 和原型的同学可以好好享受了。(评论区有同学已经沦陷,大家谨慎测试吧~)

2. 协作设计系统插件 Zeroheight

Windows 平台上的原型工具 Figma 越来越普及了,而 Zeroheight 这款用于制作协作式设计系统文档的插件,则是专门针对 Figma 所开发的。这款工具是由 Robin Tindale 、Fabien Laborie 和 Jerome 所创造。

3. 效率工具 Runner Pro

Roy van Rooijen 和 Aby Nimbalkar 所开发的这款 Runner Pro 将你的工作效率提升到了一个极高的程度,装上这款插件,你几乎能在 Sketch 上执行任何操作。

二、配色和图标类工具

1. 配色方案生成器 Coolors

这款非常易用的配色工具是由设计师 Fabrizio Bianchi 所创造,只需要几秒钟就可以为你创造完美的配色方案。试试看!

2. SVG 配色修改工具 Colorizer

在如今的设计和技术领域中,SVG 是一个非常重要的工具。这款免费工具能够帮你自动更改任何 SVG 和 SVG 库的配色,并且保持它原有的阴影和高光。非常棒了吧!

3. 图标工具包 Dopeicon

Dopeicon 是一款素质极高的图标工具包,它完全是像素完美的,每周会更新新的图标素材,并且不断为用户提供新的选择。这款图标工具包包含免费和付费的进阶版,按需购买吧。

三、字体排版工具

1. 字体排版资源 Typography Resources

字体排版在网页中起到了极其关键的作用。正是出于对这种艺术设计的热爱,Amrit Pal Singh 精心制作了这套字体排版资源。分类明晰,确保能够生成足够优秀的排版。

2. Helvetica Now 字体

在历经 36 年的沉寂之后,Helvetica 字体家族终于迎来了新的成员。如今的 Helvetica 字体比以往任何时候都要强大,而它的设计者是这样说的:这套字体拥有我们所钟爱的关于 Helvetica 的一切。这不是复兴,也不是重现,我只是在陈述事实。

四、设计工具更新

1. 工具合集 Framer Bridge

Framer Bridge 是一款用来弥合设计和开发之间关系的工具,它汇集了一系列的功能和工具来促进项目中的协作。

2. BRAVO喝彩设计

喝彩设计是一个好用的模板下载网站,上面有很多优质模板。

受伤的鸡翅
柔弱的大米
2026-05-11 14:21:45
public class Test {

public static void main(String[] args) {

Vehicle vehicle = new Vehicle()

vehicle.setSpeeed(60)

vehicle.setColor("black")

vehicle.setType("SUV")

System.out.println("车型:"+vehicle.getType()+"颜色:"+vehicle.getColor()+"速度:"+vehicle.getSpeeed())

}

}

class Vehicle{

private int speeed

private String type

private String color

public int getSpeeed() {

return speeed

}

public void setSpeeed(int speeed) {//设置速度

this.speeed = speeed

}

public String getType() {

return type

}

public void setType(String type) {//设置类型

this.type = type

}

public String getColor() {

return color

}

public void setColor(String color) {//设置颜色

this.color = color

}

}

笨笨的唇膏
优雅的汽车
2026-05-11 14:21:45
class Vehicle {

int Speed

public String getKind() {

return Kind

}

public void setSpeed(int speed) {

Speed = speed

}

public void setColor(String color) {

Color = color

}

public void setKind(String kind) {

Kind = kind

}

String Kind

String Color

public String getColor() {

return Color

}

public Vehicle() {

// 默认构造方法

}

public Vehicle(int Speed, String Kind, String Color) {

this.Speed = Speed

this.Kind = Kind

this.Color = Color

}

}

class Car extends Vehicle {

private int passenger

public int getPassenger() {

return passenger

}

public void setPassenger(int passenger) {

this.passenger = passenger

}

public Car() {

// 默认构造方法

}

public Car(int Speed, String Kind, String Color, int passenger) {

this.Speed = Speed

this.Kind = Kind

this.Color = Color

this.passenger = passenger

}

}

class Demo {

public static void main(String[] args) {

Car car =new Car(120,"宝马","红",5)

car.setSpeed(160)

car.setColor("黄")

car.setKind("奥迪")

System.out.print(car.getKind()+"\t"+car.getColor()+"\t"+car.Speed+"\t"+car.getPassenger())

}

}

聪慧的大象
舒适的糖豆
2026-05-11 14:21:45
// 直接上代码了

// 可能和你原先的代码还是有点出入的,你先看看,是否符合要求?

class Vehicle { // 建议定义类时,类名首字母大写

protected int speed// 速度

private String kind// 种类

private Color color// 颜色

public Vehicle() {

speed = 2000

kind = "TO"

color = Color.red

}

public Vehicle(int s, String k, Color c) {

speed = s

kind = k

color = c

}

public void setColor(Color cl) {

color = cl

}

public Color getColor() { // 取得颜色,则函数返回Color类型值

return color

}

}

class Car extends Vehicle {

int passengers// 可容纳旅客数

// 定义了三个重载构造函数,但原理差不多都一样,调用父类构造函数”super(传入参数)”放在子类构造函数中

public Car() {

super(2000, "DD", Color.blue)

passengers = 5// 默认情况下可容纳旅客数为5

}

public Car(int p) {

super(2000, "DD", Color.blue)

passengers = p

}

public Car(int s, String k, Color c, int p) {

super(s, k, c)

passengers = p

}

public int getMaxSpeed() {

return super.speed// 此处要取到父类中的speed,则在父类中speed不能够定义成private

}

}

// 希望对你有帮助。还有没有什么疑问呢?

神勇的鸵鸟
超帅的大船
2026-05-11 14:21:45
public class  运输工具

{

public static void main(String[] args) 

{

System.out.println("\n\t\t==========运输工具==========\n")

init()

}//初始化!

private static void init()

{

//多态,调用公共属性!

Transport v=new Vehicle(100,10,"大黄蜂")

v.show()

Transport a=new Airplane(500,80,"威震天")

a.show()

System.out.println("\n\t<--------------------------------分割线---------------------------->\n")

//向下转型!

Vehicle v1=(Vehicle)v

v1.function()

Airplane a1=(Airplane)a

a1.function()

}

}

//运输工具!

class Transport

{

protected String name//类型!

protected int speed//速度!

protected int load//载重!

Transport(int speed,int load,String name)

{

this.speed=speed

this.load=load

this.name=name

}

protected void show()

{

System.out.println(name+"--->\t速度:"+speed+"码\t载重:"+load+"吨")

}

}

//汽车!

class Vehicle extends Transport

{

private int wheel=4//轮胎!

private int weight=12//净重!

Vehicle(int speed,int load,String name)

{

super(speed,load,name)

}

void function()

{

super.show()

System.out.println("轮胎:"+wheel+"\t净重:"+weight+"\n")

}

}

//飞机!

class Airplane extends Transport

{

private String s="波音747"

private int engine=4//发动机个数!

Airplane(int speed,int load,String name)

{

super(speed,load,name)

}

void function()

{

super.show()

System.out.println("型号:"+s+"\t发动机个数:"+engine+"\n")

}

}

甜美的早晨
自信的薯片
2026-05-11 14:21:45
class Vehicle{int speed String kind String color public void setColor(String color){ this.color = color } public String getColor(){ return this.color }}

class Car extend Vehicle{int passenger public int getMaxSpeed(){ return speed }}

善良的金毛
精明的羽毛
2026-05-11 14:21:45

public class Vehicle {

private int speed

private String kind

private String color

public int getSpeed() {

return speed

}

public void setSpeed(int speed) {

this.speed = speed

}

public String getColor() {

return color

}

public void setColor(String color) {

this.color = color

}

public String getKind() {

return kind

}

public void setKind(String kind) {

this.kind = kind

}

public Vehicle(){

this.setSpeed(20)

this.setKind("自行车")

this.setColor("红")

}

public static void main(String[] args) {

Vehicle v = new Vehicle()

System.out.println("颜色:"+v.getKind()+"    类型:"+v.getKind()+"    速度:"+v.getSpeed())

v.setColor("黄")

v.setKind("汽车")

v.setSpeed(60)

System.out.println("颜色:"+v.getKind()+"    类型:"+v.getKind()+"    速度:"+v.getSpeed())

}

}

健壮的白羊
时尚的羊
2026-05-11 14:21:45
假设你要的交通工具要初始的东西有:速度,车身高,车身宽

Public Class Car()

{

Public int speed//车的速度

Public int height//车身高

Public int width//车身宽

public Car(int s,int h,int w)//在外部定义的时候传入三个参数,分别是 速度,车身高,车身宽

{

speed=s//初始化车速度

height=h//初始化车身高

width=w//初始化车身宽

}

}

其他的什么的成员变量的设置~~ 就是跟这个速度,高,宽 差不多

自信的西装
碧蓝的戒指
2026-05-11 14:21:45
Java有内部机制能都保证一个类的变量或者一个对象的初始只会被调用一次的。

如你的例子之中, danli是一个类变量,Java保证了该变量只会被初始化并且初始化一次的。

当第一次调用getsingleInstance()的时候,这个时候singleInstance的类还没有初始化,JVM会先初始化该类,这个过程之中就初始化了danli变量;完成之后,getsingleInstance才会返回结果。