5820k支持内存频率是你我需要p k真情握个手10怎么判断冠子军棋单双

Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,统一对有无网络处... - 简书
Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,统一对有无网络处理, 异常处理,返回结果问题
本文出处 :Tamic
Rxjava +Rterofit 需要掌握的几个技巧
这里写图片描述
RxJava入门和详解请移步 比较有名的《RxJAVA详解》,这里继续前篇一系列的介绍一些容易忽略的技巧.
Retrofit+RxJava结合系列请阅读:
一般我们在视图消亡后,无需RxJava再执行,可以直接取消订阅
subscription.unsubscribe()
observable.unsubscribeOn(Schedulers.io());
可用在activity的 onDestroy(), Fragment的 onDestroyView()中调用
还有种场景是借助rxJava请求网络数据,需要网络返回后保存数据并更新UI,这种情况视图已经消亡了必定会导致rxJava出错,导致App闪退,这种我们可以判断前的activity/view是否为空,并是否已showing,如果
两者都不存在,即可无须更新UI。只处理保存数据即可。
需要UI绘制后再进行订阅的场景,防止阻塞UI,我们需要延迟订阅执行。
observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action);
observable.delay(2, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(action);
基础ApiService
通常我们写接口会有以下定义,增加一个api就必须写一个方法
public interface MyApi {
@GET("app.php")
Observable&SouguBean& getSougu(@Query("name") String name);
@GET("/getWeather")
Observable&ResponseBody& getWeather(@QueryMap Map&String, String& maps);
很多时候每新增一个接口就要写一个api,是不是有很好的方法代替这种情况。
&T& Observable&ResponseBody& get(
@Url String url,
@QueryMap Map&String, T& maps);
我们可以定义一个通用的getApi,将url动态传入,返回Modle定义为ResponseBody, 并将实际参数定义为泛型,不管是更改url,还是服务端返回类型,包括参数个数都可以完美适配,这种方式技术不到位的千万别用,因为Retrofit明确说明接口必须要给定明确类型,悠着点哈!
上层进行通用组装时就可以这样子:
public &T& T get(String url, Map&String, T& maps, BaseSubscriber&ResponseBody& subscriber) {
return (T) apiManager.get(url, maps)
.compose(schedulersTransformer)
.compose(handleErrTransformer())
.subscribe(subscriber);
看不懂?看不懂不算奇怪,源码可以去文章末尾下载研究,这里只是列举了一下。这种方式很适合从HttpClent迁移到Retrofit带来接口适配问题,一用一个准啊…
基础Subscriber
很多时候我们需要借用RxJava开启多个observable去读取网络,这是我们对不同Subscriber处理起来比较麻烦,因此统一对Subscriber对网络返回进行处理和, 有无网络做判断,甚至可以根据需求显示加载进度等
构建抽象的BaseSubscribe类,只处理start()和onCompleted() ,上层处理时只处理onError()和onNext()
* BaseSubscriber
* Created by Tamic on .
public abstract class BaseSubscriber&T& extends Subscriber&T& {
private BaseA
public BaseSubscriber(BaseActivity context) {
this.context =
public void onStart() {
super.onStart();
if (!NetworkUtil.isNetworkAvailable(context)) {
Toast.makeText(context, "当前网络不可用,请检查网络情况", Toast.LENGTH_SHORT).show();
// **一定要主动调用下面这一句**
onCompleted();
// 显示进度条
showLoadingProgress();
public void onCompleted() {
//关闭等待进度条
closeLoadingProgress();
这样我们上层调用时只关心成功和失败即可,无需再关心网络情况
observable..subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new BaseSubscriber&ResponseBody&(MainActivity.this) {
public void onError(Throwable e) {
Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
public void onNext(ResponseBody responseBody) {
Toast.makeText(MainActivity.this, responseBody.toString(), Toast.LENGTH_LONG).show();
如果想对Error错误统一处理,也可以在BaseSubscriber处理onError(),
然后回调搭到callback上层,具体看自己项目情况而定,可以接着往下看
如果对成功结果进行处理,则可以将ResonseBody加入泛型&Response&T&& , Response一般是包含Code,MSg, Data的,在这里你可以根据判断code来进行业务分发,代码很简单,具体看文章结尾源码即可
如果你觉得目前的返回判断麻烦,也可以定义Response基类
* 网络返回基类 支持泛型
* Created by Tamic on .
public class BaseResponse&T& {
public int getCode() {
public void setCode(int code) {
this.code =
public String getMsg() {
public void setMsg(String msg) {
this.msg =
public T getData() {
public void setData(T data) {
this.data =
public boolean isOk() {
return code == 0;
这样我们在onNext() 只需统一判断状态码即可
public void onNext(BaseResponse&IpResult& responseBody) {
if (responseBody.isOk()) {
//这里这个ok不是http访问的ok,
//是和服务器约定好的成功码 有的人不喜欢可以不用加这个筛选, 也有的人喜欢将业务加到业务回调中,如果不是成功码 也//不走错误回调,也不走成功回调,直走业务回调
IpResult ip = responseBody.getData();
Toast.makeText(MainActivity.this, ip.toString(), Toast.LENGTH_LONG).show();
错误结果问题
通过RXJva的 Func1来进行对原始的Throwable
进行包装转换
我们将原来Throwable
强转成自定义的 ResponeThrowable;
private static class HttpResponseFunc《T》 implements Func1《Throwable, Observable《T》》 {
@Override public Observable&T& call(Throwable t) {
return Observable.error(ExceptionHandle.handleException(t));
ResponeThrowable
public static class ResponeThrowable extends Exception {
public ResponeThrowable(Throwable throwable, int code) {
super(throwable);
this.code =
我们已经处理好强转工作后 继续把 Func1加到Observable 中:
因此这样用observable提供的onErrorResumeNext 则可以将你自定义的Func1 关联到错误处理类中:
((Observable) observable).onErrorResumeNext(new HttpResponseFunc&T&());
很可能你感觉有点不理解,这前提你需要了解RxJava的转义符和操 Observable.Transformer
这样我们对服务器返回的错误状态进行了自我的处理,再稍加翻译下便可以达到用户看懂的语言
这个类我参考一叶扁舟同学的案列,我再次做了改进:
ExceptionHandle 错误处理驱动
public class ExceptionHandle {
private static final int UNAUTHORIZED = 401;
private static final int FORBIDDEN = 403;
private static final int NOT_FOUND = 404;
private static final int REQUEST_TIMEOUT = 408;
private static final int INTERNAL_SERVER_ERROR = 500;
private static final int BAD_GATEWAY = 502;
private static final int SERVICE_UNAVAILABLE = 503;
private static final int GATEWAY_TIMEOUT = 504;
public static ResponeThrowable handleException(Throwable e) {
if (e instanceof HttpException) {
HttpException httpException = (HttpException)
ex = new ResponeThrowable(e, ERROR.HTTP_ERROR);
switch (httpException.code()) {
case UNAUTHORIZED:
case FORBIDDEN:
case NOT_FOUND:
case REQUEST_TIMEOUT:
case GATEWAY_TIMEOUT:
case INTERNAL_SERVER_ERROR:
case BAD_GATEWAY:
case SERVICE_UNAVAILABLE:
ex.message = "网络错误";
} else if (e instanceof ServerException) {
ServerException resultException = (ServerException)
ex = new ResponeThrowable(resultException, resultException.code);
ex.message = resultException.
} else if (e instanceof JsonParseException
|| e instanceof JSONException
|| e instanceof ParseException) {
ex = new ResponeThrowable(e, ERROR.PARSE_ERROR);
ex.message = "解析错误";
} else if (e instanceof ConnectException) {
ex = new ResponeThrowable(e, ERROR.NETWORD_ERROR);
ex.message = "连接失败";
} else if (e instanceof javax.net.ssl.SSLHandshakeException) {
ex = new ResponeThrowable(e, ERROR.SSL_ERROR);
ex.message = "证书验证失败";
ex = new ResponeThrowable(e, ERROR.UNKNOWN);
ex.message = "未知错误";
* 约定异常
class ERROR {
* 未知错误
public static final int UNKNOWN = 1000;
* 解析错误
public static final int PARSE_ERROR = 1001;
* 网络错误
public static final int NETWORD_ERROR = 1002;
* 协议出错
public static final int HTTP_ERROR = 1003;
* 证书出错
public static final int SSL_ERROR = 1005;
public static class ResponeThrowable extends Exception {
public ResponeThrowable(Throwable throwable, int code) {
super(throwable);
this.code =
public class ServerException extends RuntimeException {
接着可以在 BaseSubscriber&T&中处理异常拉
public abstract class BaseSubscriber&T& extends Subscriber&T& {
public BaseSubscriber(Context context) {
this.context =
public void onError(Throwable e) {
Log.e("Tamic", e.getMessage());
// todo error somthing
if(e instanceof ExceptionHandle.ResponeThrowable){
onError((ExceptionHandle.ResponeThrowable)e);
onError(new ExceptionHandle.ResponeThrowable(e, ExceptionHandle.ERROR.UNKNOWN));
最后上层调用就是这样了:
RetrofitClient.getInstance(MainActivity.this).createBaseApi().getData(new
BaseSubscriber&IpResult&(MainActivity.this) {
public void onError(ResponeThrowable e) {
// 处理翻译后异常。
Log.e("Tamic", e.code + " "+ e.message);
Toast.makeText(MainActivity.this, e.message, Toast.LENGTH_LONG).show();
public void onNext(IpResult responseBody) {
Toast.makeText(MainActivity.this, responseBody.toString(), Toast.LENGTH_LONG).show();
}, "21.22.11.33");
值的注意的是上层使用BaseSubscriber 的实现类和子类即可,如果你想要重写BaseSubscriber 的onStat()和onCompleted() 也是可以的, 一般BaseSubscriber只处理公用的处理,或者进行下业务对返回格式检查,具体成功
解析有他的子类(实现类)去做。
注意:如果你不想将业务分发加到错误回调中,也可以这样做:
好比有的人喜欢将业务处理加到业务回调中,如果后台返回的业务码并不成功码的情况下, 不想走错误回调,也不想走成功回调, 想走直走业务回调。
可以这样处理:
在onNext() 中回调一个自定义的抽象的onBusiness(code, masg),将他的子类去实现
public void onNext(BaseResponse&IpResult& responseBody) {
if (!responseBody.isOk()) {
//业务分发
onBusiness(responseBody.getCode, responseBody.getMsg)
// 成功回调
onNext(responseBody.getData())
公共缓存:
有时候需要在无网络时增加缓存功能,因此给Retrofit加入基础拦截器,来处理缓存问题
* BaseInterceptor
* Created by Tamic on .
public class BaseInterceptor implements Interceptor{
private Map&String, String&
public BaseInterceptor(Map&String, String& headers, Context context) {
this.headers =
this.context =
public Response intercept(Chain chain) throws IOException {
Request.Builder builder = chain.request()
.newBuilder();
builder.cacheControl(CacheControl.FORCE_CACHE).url(chain.request().url())
if (!NetworkUtil.isNetworkAvailable(context)) {
((Activity)context).runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, "当前无网络!", Toast.LENGTH_SHORT).show();
if (headers != null && headers.size() & 0) {
Set&String& keys = headers.keySet();
for (String headerKey : keys) {
builder.addHeader(headerKey, headers.get(headerKey)).build();
if (NetworkUtil.isNetworkAvailable(context)) {
int maxAge = 60; // read from cache for 60 s
.removeHeader("Pragma")
.addHeader("Cache-Control", "public, max-age=" + maxAge)
int maxStale = 60 * 60 * 24 * 14; // tolerate 2-weeks stale
.removeHeader("Pragma")
.addHeader("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
return chain.proceed(builder.build());
okHttpClient加入拦截器
okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new BaseInterceptor(headers))
.addInterceptor(new
CaheInterceptor(context))
.addNetworkInterceptor(new CaheInterceptor(context))
Retrofit 加入okhttpClient
retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(url)
单独缓存:
如果你不想加入公共缓存,想单独对某个api进行缓存,可用Headers来实现,那么可以这样:
@Headers("Cache-Control : public, max-age = 3600")
@GET("service/getIpInfo.php")
Observable&BaseResponse&IpResult&& getData(@Query("ip") String ip);
值得注意的是 下面的两句话也必须加入:
.addInterceptor(new
CaheInterceptor(context))
.addNetworkInterceptor(new CaheInterceptor(context))
缓存路径和默认大小
如果想更改okhttp的缓存路劲,可以设置cache的path路径 ,姿势如下
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
第一个参数是路径,第二个最大缓存大小
okHttpClient = new OkHttpClient.Builder()
.cache(cache)
这样就加入自定义的Cache策略
自定义缓存
如果你不想用okhttp自带的缓存策略,因为这需要服务端配合处理缓存请求头,不然会抛出: HTTP 504 Unsatisfiable Request (only-if-cached)
除了以上修改 Request.cacheControl的方式实现缓存,也可以自定义一个Cahe策略用来实现本地硬缓存。
构建CaheManager,用Url对应Json实现,此类非常简单,你可以自己实现,时间策略可自我加入扩展
在BaseSubscriber进行网络判断,加载缓存数据返回妥妥的;
public void onStart() {
super.onStart();
Toast.makeText(context, "http is start", Toast.LENGTH_SHORT).show();
// todo some common as show loadding
and check netWork is NetworkAvailable
NetworkAvailable no !
must to call onCompleted
if (!NetworkUtil.isNetworkAvailable(context)) {
Toast.makeText(context, "无网络", Toast.LENGTH_SHORT).show();
if (isNeedCahe) {
Toast.makeText(context, "无网络,已智能读取缓存!", Toast.LENGTH_SHORT).show();
IpResult ipResult = new Gson().fromJson(CaheManager.getjson(url), IpResult.class);
onNext((T) ipResult);
onCompleted();
通过这次的整理,再进行RxJava和Retrofit中 ,所有坑直接添就行,接着上次的介绍,笔者进行新框架开发novate已快接近尾声,估计本月就能和大家见面,敬请继续关注!
Retrofit 2.0系列请阅读
第一时间获取技术文章请关注扫码微信公众号!
开发者技术前线
本文已在版权印备案,如需转载请访问版权印。
Android猿,交流QQ群: , github:https://github.com/Tamicer , 文章未经授权私自转发公众号或未带原文链接后果一律自负! 本作者文章已托管给版权印:http://www.banquanyin.com/u/540
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
rxjava 在 android 中的杀手锏瞬间(一) - Android - 掘金解决button快速点击 private PublishSubject
eventSubject = PublishSubject.create(); public static fina...
前言: Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求,其源码详见OkHttp Github。 RxJava ...
Retrofit是squareup公司的开源力作,和同属squareup公司开源的OkHttp,一个负责网络调度,一个负责网络执行,为Android开发者提供了即方便又高效的网络访问框架。 不过,对于Retrofit这样设计精妙、代码简洁、使用方便的优秀开源项目,不能仅知道...
日念一日好,为幸福美满家庭加持第43天。
一、念老公好:晚上加班回来后接仔回来;
二、念女儿好:快考试了还坚持真是很棒的孩子;
三、念自己好:每天变花样做早餐,继续学习、上课,真是位有心、热爱生活、有正能量的人;
感受:习惯了老公每天在家陪我们的感觉...
四组组名:007第4组 四组战友:8人 四组志愿者:李业|007-5503| 应交人数:8人 实交人数:8人 迟交人数:0人 未交人数:0人 点评情况:共有8人点评 张卉媛|007-5496| 践行:《比较文学研究入门》读书笔记(一) 金丽文|007-5497|践行:人生的...
家居卧室设计也有大学问,一般人都不会注意,您装对了么? 有科学研究表明,人的一生中至少有三分之一的时间是在卧室中度过,由此可想而知,卧室空间设计对于人体健康的影响程度之甚大,从而也使卧室设计成为家居设计中十分重要的一门学问。今天,我们跟着美屋定制家装来学学这其中的学问吧。 ...
坐在火车上,听着上个世纪呢喃的情歌,伴着落日的光彩,我似乎明白那句,人唯有明白自己想要的是什么,才能守住幸福。假如我天生就是一个平凡的人,那我为何不遵循这平淡的宿命。我不仅没有任何的怨怼,反而,我感恩戴德,对上天,对这和平的年代,对那些付出血汗苦累的伟大的人。因为我深知,需...有哪些令人叫绝的心理学效应? - 知乎<strong class="NumberBoard-itemValue" title="2被浏览<strong class="NumberBoard-itemValue" title=",161,774分享邀请回答2.9K95 条评论分享收藏感谢收起如何控制负面情绪?www.zhihu.com另,更多 思维方法 与 学习策略 的深度文章和课程,可在公众号中获得公众号【学习策略师】,为高中生提供学习策略建议;公众号【人生策略师】,给大学生与职场人士服务;同时还有一些QQ群可供互动讨论(入群密码都是“叶修”,1-4群都满了):高中生群:高中学习策略5群 高中学习策略6群 高中学习策略7群 大学生与职场人士群:学习的策略5群 学习的策略6群 学习的策略7群 希望这些内容与平台能帮到大家71124 条评论分享收藏感谢收起今天黑色星期五p k保持微笑10冠子亚和值全体包法_百度知道
今天黑色星期五p k保持微笑10冠子亚和值全体包法
粘上去输,入 cp2344.n&shye&shyt...怎么可能会把你介绍给他的
我有更好的答案
玩彩的目的都是娱乐 你说的这个就可以,这次又挣7000呢 ,运气真的好了啊
采纳率:100%
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。运营总监或运营经理是怎么成长起来的? - 知乎<strong class="NumberBoard-itemValue" title="1被浏览<strong class="NumberBoard-itemValue" title=",039,839分享邀请回答1.1K199 条评论分享收藏感谢收起3.7K242 条评论分享收藏感谢收起零基础如何学习绘画? - 知乎<strong class="NumberBoard-itemValue" title="2被浏览<strong class="NumberBoard-itemValue" title=",109,327分享邀请回答---以下是本文目录,供你再次回顾----
由于答案不停补充,以下内容我特意总结了个目录,请按需索引:
【第一部分:给零基础成人学画建议的总结】
【第二部分:我不认同其它同类问题的回答部分】
Q1:成人了追求技术还重要吗?
Q2:警惕速成类和绘画细节的答案。
【第三部分:绘画究竟是什么?该怎么学?】
Q1:绘画的本质是啥?(从提纲挈领的全局角度看)。
Q2:技艺、技术、技巧有什么不同?
Q3:视觉审美之外的那部分DNA审美。
Q4:浅谈设计。设计手绘要求低,就真的简单吗?
【第四部分:学画的目的不同,实现手段大相径庭】
Q1:喜欢古典大师油画,喜欢CG概念设计;
Q2:喜欢设计类;
Q3:陶冶情操,热爱生活的;
Q4:喜欢动漫,混二次元想画同人的;
Q5:只想提高审美,想用视觉手段表达情绪的;
---------------------------------------------【第二部分:我不认同其它同类问题的回答部分】:Q1:成人了追求技术还重要吗?我认为即便是业余爱好者学绘画,也要从专业绘画和系统里求方法,因为好老师可以化难为易。而所谓的技术,没有的时候它最重要,有的时候技术最不重要。自我表达和探索非常重要,但以成年学画的过来人身份来看,这种说法对于零基础的人而言太形而上了,听着漂亮,却没有可实践性。或者说“不停地表达”至少是说给有一点点基础的人,对于一张白纸而言,如果没有段位较高的老师带路,更是会偏到姥姥家去!因为,非常多的小白,对绘画的热爱是需求,是欲望。一般不是绘画科班生后期追求的“视觉表达”。没有这些欲望,他们早玩别的去了,至少摄影门槛很低吧。(坦白说对于业余爱好者没有任何帮助)(只会让初学者要么妄自菲薄要么自以为是)因为大部分新人,根本无力分辨”技术“和”表达“,而且也难以抵抗”追求技术“的诱惑。比如,有人就是为了能唰唰唰画出个小人来好腻害,才觉得喜欢才想学绘画。潇洒都是“轩尼诗”广告给普通人的幻觉,哈哈!抛出一个问题:为什么“普通人”、“学过1年”、”学过5年“和”学过10年“的人喜欢的东西会不一样?Q2:警惕速成类和绘画细节的答案!其他许多“业余学绘画”的热门回答要么“搬运速成类步骤“(你不如直接看高考美术的书,讲更详细),要么放”有设计感的自学习作”(这些作品好主要好在“设计”和“表达”了),还有一些详细讲解某个技巧细节,贴着图答案老长的答案。我简直对这些答案嫌弃到家了,因为类似的答案对于曾是新人的我有很多误导,让我走了不少弯路。而我发现我们这个问题下面的回答几乎是最靠谱,都不太会讲这些细枝末节的。还有一些答案,搬运学画画的流程(老天爷),比如用什么笔,第一步第二步什么的,介绍绘画工具的,我就呵呵了。你需要来知乎看吗?书店里大把这样的书,怎么就没人关心呢?画画毕竟还是实践类学科,看再多也不会画。如果你觉得好奇想理解理解,那就买贝蒂《像艺术家一样思考》那个系列,还有《素描的诀窍》一类的书吧!“不过读完颇有成功学的意味!”----来自本答案评论的一位小哥。我发现有不少关注这个回答的人是技术小哥(我最喜欢技术小哥啦,星星眼),坦白说技术小哥都容易控技术,如果你是热爱生活对视觉艺术好奇才想要了解绘画的奥秘的话。其实很简单!有个小半年就能成为绘画界的“王语嫣”,但是手下来风的画出东西,就跟练武似的没有捷径可走。如果你成为王语嫣便有了轻视之情的话,你可能会说我已然懂了绘画那套神秘,但你距离艺术却越来越远。我还是来讲点书里不会说,纯属于我个人总结的东西吧!------------------------【第三部分:绘画究竟是什么?该怎么学?】:Q1:绘画的本质是啥?在我看来,绘画的本质是“视觉艺术”中的“基础学科”,它是最基础的也是最高级的,是最初的也是最终的。什么是视觉艺术,就是需要通过眼睛这根数据线,才能输入到你大脑的所有信息。这些信息有很多种,有形而上比较高级的,也有形而下比较低级的。传统绘画和摄影是比较典型和独立存在的视觉艺术,这就像是数学、哲学、文学等等基础非应用类的学科。这两个学科在傻傻混淆不清之后,经过近一个世纪的前辈努力,有了各自的“哲学定义”和“审美语言”。当然摄影的艺术地位也是近些年奠定的,在表现手法上摄影也不及绘画自由。这类基础学科有一个共通的特点:你需要学习他们入门习得技能,然后四散到各种应用学科中,找份工作谋生不难,但如果你想在纯粹的领域有所建树,非常有难度。你学习的这些技能只是基础,“有想法的表达”才是关键,而有想法又能通过娴熟的技巧以及合适的方法表现更是难上加难。虽然所有的视觉艺术类专业,科班一般从素描着手入门。(最好是西洋古典素描入手,不用学俄国那个系统)注意两点,1这是科班的训练方法,2素描并不是唯一的入门途径。所谓的技能的习得方法其实有很多种。直接学习速写也是OK的,但是!!!学院派的教学对于高标准的绘画技能而言,其实是捷径。好啦,不说废话。在我看来视觉艺术,不管什么门类,基础训练都在提高“技艺”和“部分审美”。Q2:技艺是什么?技术+技巧。1,技术:我会什么?我能选择什么?是对线条、光影、体积、空间、色彩的理解(这是外部的表象的)这些理解来源于素描色彩速写的基本功训练,而审美和技能又直接表现在手头功夫上。ps:基本上解决了以上这些问题之后,你的朋友甚至自己都会觉得自己已经会画画了。但可能画地不够美,通常也不能自由表达。临摹还凑合,自己创作完全瞎眼。2,技巧:我选择不用什么?这个时候有取舍、做减法,反映的就是画家的格调和品味。ps:这种往上走有时就会返璞归真,你不会追求百分百完美。甚至说流派的画风,和画家风格,就是取舍不同,追求不同。比如你知道有些大师晚年的画作简直就是儿童涂鸦,就是这么个“大智若愚”的回归。其实绘画技术,我觉得一言以蔽之就是:就是如何和谐地组织并处理视觉因素之间的对比关系。对,就是关系。注意:绘画的技术部分,大多是理性的。“组织和处理”是非常有逻辑的绘画动作。意外吗?绘画这门技术实际上绝大部分是纯理性的,纯逻辑的。而这个动作会处理的视觉因素包括有:明度、饱和度、空间大小、剪影外形、内部几何形等等;继续画下去,除了丢不掉的基本训练外,就是螺旋式上升的过程----&要开始学人体结构啦,要学习透视啦,要专门学习设计理论啦,要学习色彩理论和光色理论了,甚至要学习消费行为学啦!Q3:为什么是“部分审美”?接着上面,在上面所说的手头功夫之上,又深藏着对画面的设计布局、立体空间的展现、形状与情绪的关联等等更高级的技能(这部分技能和个人审美和悟性有部分交叉)。更高段位的老师会讲,书里会讲,但能理解到哪个层面是需要悟性的。此时,决定是否有想法,作品是否有趣,取决于你的知识结构、人生经历、你在其他艺术领域的造诣啥的。说白了,就世界观,价值观,这是独属于你的DNA审美。在这其中,不同专业领域形而下有各自不同的审美偏向和趣味,但是形而上层,都开始讲哲学观了(这个就一通百通了)。所以,跨界究竟跨地什么界?Q4:浅谈设计。学设计手绘要求低,是不是就比较简单呢?接下来,我们说说设计类,这也是视觉设计的一种,但是手头功夫为什么没有纯绘画要求那么高?这一领域,本质是在设计生活中,所有人与人、人与世界、人与自然、人与机器交互的方式方法。因此广义的设计包含了一切东西,狭义的设计往往会牵扯到心理学。此时,你的视觉呈现,不再是“自我表达”即可,而是其它人看到你的视觉设计,是否产生了你预期的期望。真正完整的作品等于“你的视觉作品本身+目标观看者的反映”!比如网页设计、环境艺术、建筑设计、装帧设计、交互设计和家具设计等等。他们在保证视觉美观的基础上,最最最最重要的能力体现在对“我设计的东西给谁看?他看了会喜欢不?好用吗?我怎么组织这些视觉信息?通过什么媒介?信息是否有用好用”等等问题的思考和解决上。一个好的设计师,为了达到以上目标效果,还需要额外学习材料的使用和工艺手段,比如服装设计师要学面料、烫染,装帧要学印刷,工业设计更要了解材料等等。总看到新人一来,总会一个头俩个大提到的ps,cad,3Dmax,单反相机啥。而坑爹的培训学校也是批量教这些软件,我只想说那些真得只是工具,制作的工具,还是脑袋比较重要。当然,健全的十指,也是重要的工具。如果你不急着靠这些谋生,我建议你可以多看看好作品不用急着学技术,尤其不用急着学软件。不少人看见设计类学科,对手绘能力要求低,就会疑问:原来做设计,不需要很强的手绘,那设计是不是更简单更好学!还有就是,为啥那么多在职的设计人员还会去画室里练基本功呢?他们在练什么?我的答案是:大部分人通过素描训练自己的造型能力,并提高视觉审美。因为绘画基本上把美的部分挖掘到了极致,而各种主义,成体系的设计理论都是近代才出现的。绘画练习提高审美,而设计是种思维方式,这种思维方式,靠手绘练习是绝对不够的。实际上“视觉艺术”最重要的基本功就是“造型能力”,是视觉创造者的“地基”。绘画毋庸置疑,就算拿设计来说,包豪斯第一年的基础课也是以“训练造型能力”为主啊!基础课主要是《结构素描》和《人体素描》的课程。那么,这素描,这人体和工业化生产的椅子、把手和茶杯有半毛钱关系吗?总之,没有地基、妄谈创作,我觉得都是极不真诚的。地基是什么?正是小白一开始学习就应该思考的问题。把那些高手在造型上的夸张理解为”不准确“,于是觉得自己画不准确也可以,实为天上地下。另外,设计其实是非常大非常大非常庞大的一个领域,我几句话讲不完。一个绘画,一个设计,两大系统互相交融,在视觉艺术领域中,你需要二者交替式的上升,才能成为高手。当然二者如果只是谋份工作,都有属于自己的套路,那种商业化的套路,此处按下不表。做个一般的设计作品,你当然可以通过软件一键实现某个效果。但如果想出比较精彩的作品,往往还是逃不开绘画的基础训练和本质。也许有人反驳,XX漫画大师画的人体比例失调,我照样喜欢,人家照样是大师。这时,请注意漫画的核心是:故事内核。漫画是以讲故事塑造人物,来输出观点的。那么,你“讲故事、塑造人物,产出世界观”的技能靠谱吗?我还没说分镜头知识呢。你一定要有能力区别,或者有一定概念,那就是:区别视觉艺术门类中,不同专业的侧重点。他们审美差别很大,工具差别也很大。但无一例外,都需要基本的视觉审美。这部分审美,多多少少都需要一段时间的基本功训练。------------------------------【第四部分:学画的目的不同,实现手段大相径庭。】这时,想学绘画的人都问问自己,我是为啥学绘画?是为了考学工作or怡情怡性?对自己产出高质量绘画作品是否有要求?还是仅仅想提高一下审美?我是因为喜欢谁?或者喜欢什么类型作品?羡慕什么样画画的人?还是因为热爱生活,才动了学画画的念头。这是我给出的答案:目的不同,建议不同。我觉得为了工作、考学的,不用我赘述,身边都是搞画画的,应该比较清楚。就讲讲那些像我一样工作了,可能因为小时想学没学成,一直耿耿于怀,又不知道如何下手的人吧。1、喜欢的是文艺复兴类酷炫叼类,对自己产出优秀作品有所渴望的,那还是需要类似科班的训练,来不得偷懒。比如看见那些经典油画、原画师、概念师的CG作品,就很渴望自己也能那样的。二话不说,找正规老师科班学习,每日练习吧!主要练习造型能力,我个人认为师从纯艺术的老师,从学院派里找到的方法(警惕高考培训班的方法可能会禁锢思维)反而是种捷径。(自学会走很多弯路)。插一句闲话:如果是非科班生却希望自己能画油画的,要么是叶公好龙,要么是青少年时期多多少少经过一些”素描训练“。素描,不是入门绘画的必修课,也不是第一堂课,但如果你想画CG,想画西洋那套,想画油画想产出学院派那样的牛逼作品,素描练习肯定逃不掉的!学院派逃不开素描练习(狭义的)!素描是个大体系——形而下只是一种训练手段(造型、空间、明度、设计等),形而上不仅有记录功能,其实也暗含几何形的设计审美和情绪表达方面的东西。所以素描是基础,没有所谓的学会了,永远在学画永远也在练素描关系。讲下去就太虚了,这里不讲了,里面的训练细节多了去了,这里也讲不清。建议从体系上了解了解美术史,至于“过程学习”还是找个靠谱老师吧!体系大致就是:从学院派素描(欧洲那边)荷尔拜因鲁本斯安格尔之类开始,再了解俄罗斯素描(我们国家的学院教学是俄派,其技法与以上素描细节略不同),最后了解美国素描。他们有一个演变过程,了解这个演变过程也能在审美上有极大的进步。ps:如果追求表达的自我,感动自己即可,我觉得是没必要学习绘画的,自己去写诗去唱歌可能更方便快捷。有钱就买台相机。只要你真得感动到了自己,就一定也能感动别人。2、如果喜欢的是设计类的,比如平面类、手绘类、服装设计,UI设计、家具设计,以及各种工艺品设计,可以针对自己喜欢的门类开始关注专门的群,专门的论坛。先和那些爱好者混熟了,自己也要看一些大师的访谈和书籍、日本北欧各种设计类的书籍和纪录片,以加强对这个领域的理解,提高自己的审美。不同领域有各自的审美趣味,不过到了视觉层面你会发现要素都是相通的。如果你是初学者,你得要求自己从设计的专业角度来看作品好坏,好的为啥好,烂的为啥烂。不要单纯看着好看,好玩。世界设计史的发展也建议看一下。有些审美就像认字一样,你字认不全是没法欣赏诗的。所以如果是爱好者,某些设计领域可能难以体会大师杰作的牛逼之处。如果有自己针对性喜欢的领域,可以多上国外的垂直网站,看“职业”的作品,还要学习相关软件了。这方面知乎有更详细的解答,就不赘述了。插播一句:狭义上的绘画指“用手绘画的部分“,但宏观上的绘画指的是“视觉艺术”本身。因此,即便是搞纯绘画的人呢,当解决了技巧问题之后,会面临两大块:左手是“画”、右手是“设计”。左手进步了,就要想法提高右手,右手进步了,左手也得跟上。二者的一个差别就是,审美上去了不容易下来,可画画如果几天不练就跟没学过一样。3、对于想陶冶情操热爱生活的,我建议学习淡彩、水溶性彩铅或者从头国画入手。很多人喜欢英式水彩,比较干净,由于色彩饱和,容易画出简单的漂亮的图画,这方面书籍也蛮多。国画更好了,完全可以抛开西方绘画的训练方法,从一根线,一个眼睛开始画起。如果你热爱中国传统文化,是个读书人,我觉得学国画来表达自己的一些情怀心思,是最棒的。国画它自成一个体系,不要用它来和西洋绘画作比较。如果是水彩,按部就班,买一些速成的书,按照步骤,第一次就能出不错的效果。我周围那些一时冲动的朋友,我都是喊他们画这些。而且画具也漂亮,也能满足买一堆画具的收集癖。因为热爱生活的人,很可能热情飞快转移到烘焙、茶艺、养宠物等等就不再画画了,但这种你又能随时捡起来。花一下午时间认真画了一副兰花,陶醉了自我感到愉悦即可,不必要用科班绘画的技法禁锢自己。可一旦入了门,要强的人最容易追逐技法,但你也要知道,自己其实和专业绘画者任然有巨大差异。如果你愿意用最简单的线条(儿童画的那种)不停表达自己,反而会获得专业人士的认同。4、如果喜欢的是动漫作品,比如二次元想画同人,想自己画个漫画四格啥的,直接练习速写即可(不用画素描)!练习速写这部分有很多艺用解剖、人体动作的书和大师的视频可供参考。评论里有朋友提醒说不是速写,是“线稿”。事实上,在专业领域,速写和素描一样有着一脉相承的讲究。所以我这里的意思就是练线稿,这个领域还是多从动画领域取经,它们线稿很强!有些人小时候学过国画,如果练过工笔or白描则非常不错,我个人比较喜欢美式插画和漫画。如果对画那种写实类的油画兴趣不大,一直练线稿练人体也能是高手,也能有很强烈的成就感。软肋就是线稿强色彩就会弱了(摊手,没时间练嘛)。当然叻,如果是受欢迎的漫画作品强不强的重点还是:讲故事的能力哟!如果故事讲地好,画地差也没关系,可以参考很多照片。而且你好好想想自己喜欢那些漫画,究竟是为了故事还是为了画?那些同人作品在画技上都不算高手,但紧紧抓住了大家的G点,比如”很萌“或”很腐“,所以才大受欢迎粉丝多多,这里就是上面说地消费心理学。你说《东京食尸鬼》画地好么?分镜也挺乱的。《大剑》漫画里都是大脑袋,不照样被人喜欢吗?而且最早的《灌篮高手》也是大量参考体育画报的好吗?《进击的巨人》更能佐证画功渣,但强大世界观并不妨碍它大受欢迎。5、只是想提高审美的,我觉得如果没有“我靠我也要画这么屌”的欲望,只是业余喜欢视觉艺术,不如学摄影!绘画还是门槛比较高,最重要的是学习时间成本实在太高!太高!太高!太高!。摄影的话,你有个iphone就已经可以记录生活中的美了,至少第一步摄影的构图裁图,就能体现你一部分的审美趣味,再用一些很便捷的摄影APP,完全可以表达一些情绪方面的东西。摄影和绘画在审美和追求上,还是很不一样的,但那也都是高级层面的事了。不过注意一点:二者都追求构图,但看重的不一样罢了!(如果有机会我会再写绘画和摄影的审美区别~~啦啦啦啦给自己报备留底)因此,了解自己的需求,就可以尽快动手了。有些科目不需要太好的手绘功底,没有美术基础也不用妄自菲薄啦。除非你要画油画,因为其他视觉领域童不童子功其实影响不大。(话说看到一些零基础如何学油画的提问,实在无言以对。油画对基本功技巧的要求是绘画里最高的!神马零直接学油画??那么反正玩吧,油画材料挺贵的,当玩也行。)---------------------------------------------------------------------------------------------------------------不管怎样,先动手,再说。小马过河,请砥砺前行。我总觉得成年了,还是不甘心想要圆自己儿时梦的人,都是一些特别的人,一些有魂的人。5.4K478 条评论分享收藏感谢收起画画时,如何准确的起形?www.zhihu.com2:关于体积3:关于控制能力颜色和质感相关的文章我还没有写,但是形和体才是绘画基础中最难最基本的两个东西,所以大家可以先看这两类,还给大家准备了一些基本操作技巧的,比如说削铅笔,联系线条,消灭线条等。关于这个问题我就回答道这里。诚心有意愿咨询线上绘画付费教学的同学,可以加周sir QQ :“”。想获得更多新手绘画礼包的同学,可以关注微信公众号:“安德烈绘画工作室”639 条评论分享收藏感谢收起}

我要回帖

更多关于 4790k支持ddr4吗 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信