一张GIF图 一个女的看球然后一男的从从你的身边走过过坏笑了一下特可爱 貌似是韩国的 求名字

已收藏本页面
这张图为什么最近这么火?她是谁哇?二楼的女神三楼的媳妇吗?
呵呵呵呵呵
作为一个女人。。。。。我真心觉得有点平。。嘿嘿
二货,动态图才火
怀念魔兽的日子,好久没玩了
坐等答案!
sasa马赛丽cos女王。装作不知道拍的,其实是炒作
你们这些约炮的能不炫耀吗,妹子们以后都长心眼了,我们还怎么去约炮,给我们没成功约过炮的人留条活路吧
好像是苍天哥的妞
?????????????????
二楼的媳妇
这人都不认识?这女人是她妈的女儿不知道么
器材很专业啊
尼玛,这是gif图片,空间骗访问量得
姓名:马赛丽,11月12日生日,天蝎座,168公分,96斤。血型A坚定完毕。
http://blog.sina.com.cn/s/blog_4ab8cfb90100im0u.html
那个COS女王SASA?
几年前看游戏报纸上,好像是魔兽的网络名人女友被偷拍,结果发现其实是自拍
这是个gif,点进去后就是空间人数加1
马赛丽,我是红领巾
这是个gif图
你就切了第一张怎么会火
这是朴妮麦
妹纸只能说呵呵了。。。
13楼,我的也让你代替捅了吧
SASA.马赛丽.貂蝉
这个图片好几年了,
原图动图,点开后是,傻了吧,上当了吧。
平胸都那个多人抢
好像是个电影里面的场景
表问我怎么知道的。
我瞎鸡巴编的
马赛丽,自己百度图片去
东莞女???????还是东莞回来的????????
马赛丽摄影棚换衣被偷拍
?????
尼玛吊胃口
这个我草过
是拍片了吧
空间也有啊
点开以后是王宝强骂你煞笔还真点啊。。。
到底是谁啊
别拿这种图来博眼球,别人转的老早看过了,说是一个女的敲门进来就脱衣服。然后会好奇的点开去看,然后空间的访问量又加一了,
空间万千的转,你这点开没有变王宝强你搞几把
尼玛,下图呢,鸡动了
空间的东西老发这。有意思吗???这是糗百!
??????????????
世界怎么了?也不带我一起玩
坐等答案。
发图不留种.菊花万人捅
因为下一张就是访客加1.我了个槽
看点不在这里,这是个动图,下面出来的是泰囧中的王宝强!
继续坐等答案
丁字裤貂蝉 SASA
13楼说得不错,读大学那会这事比较火
没身材,没脸蛋,看了影响心情
13楼说的对,好几年了,那时候还没AFK
看过这个视频 23333
是余男吗?
这尼玛是QQ空间点进去就变一个图了 才火的
???????????????
??????????????????
有支架呢,岛国动作片现场
这个视频我看过 至于什么网站
你的懂。是偷拍这个女的换衣服
???????????????
????????????
????????
???????
这张图是上半部分,还有下半部分你没有发出来
????????
马赛丽,我叫雷锋
马赛丽,我是雷锋。
坐等答案。
13楼说得对吗
几年前魔兽世界的一妹子,据说与会长勾搭,以肉躯之身换取T6.5套…
私拍..........
网上有套图系列
来来来 咱们坐下慢慢品
不是我的女神,我心里只有男神
这是LZ女人,刚和别人在宾馆被我拍到,LZ你这帽子都成不锈钢的了!
你可能喜欢的图片笑话
最受欢迎的爆笑笑话
扫码下载糗事百科app探索Glide对Gif图片资源的获取、解析过程 - 简书
探索Glide对Gif图片资源的获取、解析过程
大家新年好,很久没写博客了。今天我们来探索一下Glide是如何支持Gif图片加载的。
本篇博客的目的
了解代码分析的基本思路与方法
了解Glide是如何对Gif图片进行支持的
为什么会有这么一个想法呢,一来一直对Glide是知其名而不知其所以然,二来还主要是工作中需要对它研究研究,以便更好的支持工作内容。
我想很多同学都希望自己可以对某种著名的开源框架了解贯通,但是很多时候研究一款框架实在是费神费力,很容易就会放弃。
造成这样的困局主要有三点:
一来因为我们在探究源码时没有明确的目标。
二来是因为我们没有合适顺手的工具。
三来是因为找不到重点,容易被其它不相干代码迷惑。
接下来我们就对上面这些问题一一带入。
探索准备工作
1,首先我的目标很明确,我需要了解Glide是否支持Gif图片,以及它是如何支持Gif图片的。这样我才可以在应用层对其做良好的支持。
因为我们的工作要求是:所有的ImageView都必须支持Gif图片
我的解决办法有三种:
1.如果Glide支持Gif图片,那么我只需要在图片调用层全部加上Gif支持开关。(事实上Glide默认就支持Gif,不需要我单独添加控制。)
2.如果Glide支持Gif图片,但是它的检测开销成本很大,那我就必须手动对资源进行解析,判断是否是Gif,如果是,则调用Gif图片的加载逻辑。如果不是,则走一般的图片加载逻辑。
3.如果Glide不支持Gif图片,那么我必须对ImageView进行扩展,然后更改应用内所有的ImageView的继承关系。这个工作量是巨大的。
因为有以上判断条件,所以我决定先从Glide的Gif支持入手。
2,因为我们需要对Glide研究、分析,那么手上必须有Glide的最新代码。我们在Glide的主页上找到源代码的下载地址,下载即可。
Glide首页:
Glide源码地址:
3.准备工作已经做的差不多了,最后还剩代码分析利器Android Studio以及Source Insight,当然放在手边为我们做辅助记录的笔和纸是少不了的。
Source Insight的主页为: Source Insight的功能很强大,我也只是懂一点点基本用法而已,不过足够用了。下载好的代码需要使用Source Insight打开,我们需要实时检索文件使用。这里不再说明Source Insight的用法,请自行学习了解。它在这里的作用是帮我们做一些引用关系检查。
除了Source Insight之外,我们主要使用Android Studio进行代码分析调试。需要将刚刚下载好的源代码解压,然后作为我们工程的一部分:
这里写图片描述
然后按照Glide的使用说明开始我们的分析入口编写:
// For a simple view:
@Override public void onCreate(Bundle savedInstanceState) {
ImageView imageView = (ImageView) findViewById(R.id.my_image_view);
Glide.with(this).load("http://qq.yh31.com/tp/zjbq/480890.gif").into(imageView);
为了辅助我们一次次分析Glide的网络访问,我们在onDestroy方法中加入以下代码:
protected void onDestroy() {
super.onDestroy();
Glide.get(this).clearMemory();
Glide.get(this).clearDiskCache();
开始探索之旅
我们如果需要了解Glide是否默认支持Gif图片,那么只需要在load方法内替换成gif图片的地址即可。
我们发现,它支持。
那么它是如何完成网络资源获取、Gif类型识别、Gif资源解析这些工作的呢?下面让我们一起来一探究竟。
Glide的网络资源获取
Glide对Gif资源的获取也是Glide网络请求的核心,我想大家对这些框架一般都看中的是这部分。让我们从这里究其所以然。
在这里声明一下,我们刚开始拿到代码时,就算会使用,也不知道真正的分析入口在哪里。但是不要灰心,就算是对代码再熟悉的人,也会迷失在这结构复杂的代码海洋里。请记住,分析的过程是总是需要来回反复查看、尝试的。所以手边的纸和笔对我们的帮助就体现出来了,我们需要通过纸和笔来记录我们走过的重要流程。
PS: 以后的分析过程会将没有歧义的过程自动略过,并且会将无关代码自动省略。
PS: 我们的分析手段主要有两种,一是通过断点调试来分析,二是通过上下文来分析。其中第一种比较方便,文章中主要采用第一种方法。
我们先来分析这段代码:
Glide.with(this)
由于我们是在Activity中使用的,所以这里的this应当是Activity,我们进入这个方法查看:
public static RequestManager with(FragmentActivity activity) {
RequestManagerRetriever retriever = RequestManagerRetriever.get();
return retriever.get(activity);
好,从上面得知,这个方法返回了一个RequestManager对象,接下来分析
.load("http://qq.yh31.com/tp/zjbq/480890.gif")
这里的load方法则调用的是RequestManager的load方法,我们看一下:
public DrawableTypeRequest&String& load(String string) {
return (DrawableTypeRequest&String&) fromString().load(string);
我们看到,load方法返回了一个DrawableTypeRequest对象,我们先记住它。接下来我们需要分析
.into(new ImageView(this));
我们跟着这个into方法一路追踪,最后来到了GenericRequestBuilder的into方法:
public &Y extends Target&TranscodeType&& Y into(Y target) {
Request request = buildRequest(target);
target.setRequest(request);
lifecycle.addListener(target);
requestTracker.runRequest(request);
这里我们看到构建了一个Request对象,我们进去看一下是如何构建这个对象的,最后我们在GenericRequestBuilder类中定位到了这个方法:
private Request obtainRequest(Target&TranscodeType& target, float sizeMultiplier, Priority priority,
RequestCoordinator requestCoordinator) {
return GenericRequest.obtain(
loadProvider,
signature,
sizeMultiplier,
placeholderDrawable,
placeholderId,
errorPlaceholder,
fallbackDrawable,
fallbackResource,
requestListener,
requestCoordinator,
glide.getEngine(),
transformation,
transcodeClass,
isCacheable,
animationFactory,
overrideWidth,
overrideHeight,
diskCacheStrategy);
看来上面提到的Request对象实则为GenericRequest的实例,我们先记下。
然后返回进入requestTracker.runRequest(request)中查看,看起来像是运行这个请求的意思。
runRequest的内部实现是这样的:
public void runRequest(Request request) {
requests.add(request);
if (!isPaused) {
request.begin();
pendingRequests.add(request);
它内部调用了request对象的begin方法,也就是说这里调用了GenericRequest的begin()方法。我们找到这个方法:
public void begin() {
if (Util.isValidDimensions(overrideWidth, overrideHeight)) {
onSizeReady(overrideWidth, overrideHeight);
target.getSize(this);
在这里走的else条件,我们可能已经不太记得target到底是谁实现的,它只是个接口,幸好有AS,我们通过调试知道这个target其实为:GlideDrawableImageViewTarget,具体它是什么时候被设置到这里的,我们先不去深究它,肯定能找到地方,但找它不是我们的目的。
我们找到它对应的getSize()方法:
public void getSize(SizeReadyCallback cb) {
sizeDeterminer.getSize(cb);
我们不要在这里停留,继续往下走,最后我们会走到com.bumptech.glide.request.GenericRequest的onSizeReady方法中,我们在这里注意重点部分:
public void onSizeReady(int width, int height) {
loadStatus = engine.load(signature, width, height, dataFetcher, loadProvider, transformation, transcoder,
priority, isMemoryCacheable, diskCacheStrategy, this);
从Engine的load方法我们进去看,这里是我们继续执行的重点,我们进入到com.bumptech.glide.load.engine.Engine的load方法:
public &T, Z, R& LoadStatus load(Key signature, int width, int height, DataFetcher&T& fetcher,
DataLoadProvider&T, Z& loadProvider, Transformation&Z& transformation, ResourceTranscoder&Z, R& transcoder,
Priority priority, boolean isMemoryCacheable, DiskCacheStrategy diskCacheStrategy, ResourceCallback cb) {
EngineJob engineJob = engineJobFactory.build(key, isMemoryCacheable);
DecodeJob&T, Z, R& decodeJob = new DecodeJob&T, Z, R&(key, width, height, fetcher, loadProvider, transformation,
transcoder, diskCacheProvider, diskCacheStrategy, priority);
EngineRunnable runnable = new EngineRunnable(engineJob, decodeJob, priority);
jobs.put(key, engineJob);
engineJob.addCallback(cb);
engineJob.start(runnable);
return new LoadStatus(cb, engineJob);
在这路上一定不能被其它代码迷惑,要感知哪部分是重点,尝试自己分析一下这部分。有没有很像任务及线程池?没错,你如果看各个类之间的继承关系的话,它们确实是,我们就不再看它们之间的关系,我们只用看EngineRunnable的run()方法。
public void run() {
Exception exception =
Resource&?& resource =
resource = decode();
} catch (Exception e) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Exception decoding", e);
exception =
if (resource == null) {
onLoadFailed(exception);
onLoadComplete(resource);
这段代码主要由两部分组成,这先简单描述一下它们的工作流程,首先进入decode方法尝试从缓存中获取资源,第一次当然是null,然后进入onLoadFailed方法。onLoadFailed会将这个任务再次提交,再次重新执行,这次会进入decodeFromSource方法:
private Resource&?& decodeFromSource() throws Exception {
return decodeJob.decodeFromSource();
我们一路向下,最后来到com.bumptech.glide.load.engine.DecodeJob的decodeSource方法,这个过程千万别掉队了,这里马上就要见到如何访问网络了:
private Resource&T& decodeSource() throws Exception {
final A data = fetcher.loadData(priority);
decoded = decodeFromSourceData(data);
这里有两部分重点,一个是获取资源,一个是对资源进行解析。这里的fetcher也是一个接口,它的实现类中有HttpUrlFetcher,很明显的网络资源获取类,我们通过调试也发现这里的对象是ImageVideoFetcher,而它的内部正是调用了HttpUrlFetcher的loadData方法,我们再继续往下,我们很快就发现了Glide的网络访问核心方法:
private InputStream loadDataWithRedirects(URL url, int redirects, URL lastUrl, Map&String, String& headers)
throws IOException {
urlConnection = connectionFactory.build(url);
for (Map.Entry&String, String& headerEntry : headers.entrySet()) {
urlConnection.addRequestProperty(headerEntry.getKey(), headerEntry.getValue());
urlConnection.setConnectTimeout(2500);
urlConnection.setReadTimeout(2500);
urlConnection.setUseCaches(false);
urlConnection.setDoInput(true);
final int statusCode = urlConnection.getResponseCode();
if (statusCode / 100 == 2) {
return getStreamForSuccessfulRequest(urlConnection);
好,是不是很熟悉呢?原来Glide内部使用了Android的HttpURLConnection来进行网络访问,而且这里的访问访问超时时间是固定的:2500毫秒。
到目前为止,我们所处的位置为HttpUrlFetcher的loadDataWithRedirects方法,当然,我们并不在主线程:
at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:49)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:44)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:20)
at com.bumptech.glide.load.model.ImageVideoModelLoader$ImageVideoFetcher.loadData(ImageVideoModelLoader.java:70)
at com.bumptech.glide.load.model.ImageVideoModelLoader$ImageVideoFetcher.loadData(ImageVideoModelLoader.java:53)
at com.bumptech.glide.load.engine.DecodeJob.decodeSource(DecodeJob.java:170)
at com.bumptech.glide.load.engine.DecodeJob.decodeFromSource(DecodeJob.java:128)
at com.bumptech.glide.load.engine.EngineRunnable.decodeFromSource(EngineRunnable.java:122)
at com.bumptech.glide.load.engine.EngineRunnable.decode(EngineRunnable.java:101)
at com.bumptech.glide.load.engine.EngineRunnable.run(EngineRunnable.java:58)
所以,到目前为止,我们已经知道了Glide是如何访问网络的。
Glide对Gif资源的识别方式
接着上面的部分继续,因为我们已经得到了从网络传回的数据流,那么接下来就需要对这些数据进行解析,我们回到com.bumptech.glide.load.engine.DecodeJo的decodeSource方法,也就是回到这里:
private Resource&T& decodeSource() throws Exception {
Resource&T& decoded =
long startTime = LogTime.getLogTime();
final A data = fetcher.loadData(priority);
decoded = decodeFromSourceData(data);
} finally {
fetcher.cleanup();
因为我们是从fetcher.loadData中返回的,所以接下来我们需要进入decodeFromSourceData方法内,然后再一路向下追踪,最后来到com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecode的decodeStream方法内:
private GifBitmapWrapper decodeStream(ImageVideoWrapper source, int width, int height, byte[] bytes)
throws IOException {
InputStream bis = streamFactory.build(source.getStream(), bytes);
bis.mark(MARK_LIMIT_BYTES);
ImageHeaderParser.ImageType type = parser.parse(bis);
bis.reset();
我们会注意到有段代码,将InputStream解析为了ImageHeaderParser.ImageType类型的对象,我们可以猜测,这极有可能是对各种网络流进行分类的地方,我们进去继续向下追踪一探究竟,最后来到com.bumptech.glide.load.resource.bitmap.ImageHeaderParser的getType方法:
public ImageType getType() throws IOException {
int firstTwoBytes = streamReader.getUInt16();
if (firstTwoBytes == EXIF_MAGIC_NUMBER) {
return JPEG;
final int firstFourBytes = firstTwoBytes && 16 & 0xFFFF0000 | streamReader.getUInt16() & 0xFFFF;
if (firstFourBytes == PNG_HEADER) {
// See: http://stackoverflow.com/questions/2057923/how-to-check-a-png-for-grayscale-alpha-color-type
streamReader.skip(25 - 4);
int alpha = streamReader.getByte();
// A RGB indexed PNG can also have transparency. Better safe than sorry!
return alpha &= 3 ? PNG_A : PNG;
// GIF from first 3 bytes.
if (firstFourBytes && 8 == GIF_HEADER) {
return GIF;
return UNKNOWN;
果不其然,在这个方法内部对所有的数据进行识别,我们在最后面看到了gif数据的识别原理:firstFourBytes && 8 == GIF_HEADER。
Glide对Gif资源的解析方式
好,既然知道了现在的数据流是gif了,那么接下来就是解析过程了,我们回到com.bumptech.glide.load.resource.gifbitmap.GifBitmapWrapperResourceDecoder的decodeStream方法处,继续往下走,我们很快就在该方法内看到有这么一行代码:
if (type == ImageHeaderParser.ImageType.GIF) {
result = decodeGifWrapper(bis, width, height);
原来这个方法对GIF类型的图片做了专门的处理,我们进入这个方法并一路向下,最后我们会来到com.bumptech.glide.load.resource.gif.GifResourceDecoder的decode(byte[] data, int width, int height, GifHeaderParser parser, GifDecoder decoder)方法:
private GifDrawableResource decode(byte[] data, int width, int height, GifHeaderParser parser, GifDecoder decoder) {
Bitmap firstFrame = decodeFirstFrame(decoder, header, data);
GifDrawable gifDrawable = new GifDrawable(context, provider, bitmapPool, unitTransformation, width, height,
header, data, firstFrame);
return new GifDrawableResource(gifDrawable);
我们注意到在这个方法内解析了Gif资源的第一帧。我们进到decodeFirstFrame方法看一下它是如何解析的:
private Bitmap decodeFirstFrame(GifDecoder decoder, GifHeader header, byte[] data) {
decoder.setData(header, data);
decoder.advance();
return decoder.getNextFrame();
这里最后调用了decoder.getNextFrame()方法,这里的decoder为GifDecoder,也就是专门用于解析Gif资源的解码器,我们进入getNextFrame()方法一探究竟:
public synchronized Bitmap getNextFrame() {
status = STATUS_OK;
GifFrame currentFrame = header.frames.get(framePointer);
GifFrame previousFrame =
int previousIndex = framePointer - 1;
if (previousIndex &= 0) {
previousFrame = header.frames.get(previousIndex);
// Transfer pixel data to image.
Bitmap result = setPixels(currentFrame, previousFrame);
这里的代码还挺长的,我们只挑最主要的看,它最后调用了setPixels()方法:
private Bitmap setPixels(GifFrame currentFrame, GifFrame previousFrame) {
// Decode pixels for this frame
into the global pixels[] scratch.
decodeBitmapData(currentFrame);
// Copy each source line to the appropriate place in the destination.
int pass = 1;
int inc = 8;
int iline = 0;
for (int i = 0; i & currentFrame. i++) {
int line =
if (currentFrame.interlace) {
if (iline &= currentFrame.ih) {
switch (pass) {
iline = 4;
iline = 2;
iline = 1;
line += currentFrame.
if (line & header.height) {
int k = line * header.
// Start of line in dest.
int dx = k + currentFrame.
// End of dest line.
int dlim = dx + currentFrame.
if ((k + header.width) & dlim) {
// Past dest edge.
dlim = k + header.
// Start of line in source.
int sx = i * currentFrame.
while (dx & dlim) {
// Map color and insert in destination.
int index = ((int) mainPixels[sx++]) & 0
int c = act[index];
if (c != 0) {
dest[dx] =
// Set pixels for current image.
Bitmap result = getNextBitmap();
result.setPixels(dest, 0, width, 0, 0, width, height);
这段代码还是很长,我们将不主要的代码隐去,中间很长一部分推测应该是进行数据转换。最终是调用了Bitmap的setPixels方法完成位图的创建。
好,到此为止,我们知道了Gif图是如何解析成位图的了,然后我们返回,回到com.bumptech.glide.load.resource.gif.GifResourceDecoder的decode方法继续向下走:
private GifDrawableResource decode(byte[] data, int width, int height, GifHeaderParser parser, GifDecoder decoder) {
Bitmap firstFrame = decodeFirstFrame(decoder, header, data);//这里是刚刚出来的地方,从这里继续向下
if (firstFrame == null) {
Transformation&Bitmap& unitTransformation = UnitTransformation.get();
GifDrawable gifDrawable = new GifDrawable(context, provider, bitmapPool, unitTransformation, width, height,
header, data, firstFrame);
return new GifDrawableResource(gifDrawable);
我们很快就发现,刚才解析好的位图被用作创建了GifDrawable对象,然后GifDrawable对象又用来创建了GifDrawableResource对象,然后返回,回到最开始的com.bumptech.glide.load.engine.EngineRunnable的run方法:
public void run() {
if (isCancelled) {
Exception exception =
Resource&?& resource =
resource = decode();//我们刚刚从这里返回
} catch (Exception e) {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
Log.v(TAG, "Exception decoding", e);
exception =
if (resource == null) {
onLoadFailed(exception);
onLoadComplete(resource);//然后代码继续向下执行会从这里走
我们回到最开始的EngineRunnable的run方法。然后我们知道这里的resource不是null,所以进入onLoadComplete方法。到这里为止,我们就完成了Gif资源的解析过程分析。
从onLoadComplete方法开始就是Gif资源的轮播流程了,由于篇幅有限,在这里就不再涉及,有兴趣的同学可以自行分析锻炼一下。
最后希望同学们可以尝试使用本方法举一反三,分析一下其它框架,反复学习,加深印象。
我建了一个QQ群,欢迎对学习有兴趣的同学加入。我们可以一起探讨、深究、掌握那些我们会用到的技术,让自己不至于太落伍。
这里写图片描述
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
系列文章:Android图片加载框架:Glide的常用用法|SquirrelNoteAndroid图片加载框架:Glide源码解析|SquirrelNote 前言 本篇将从源码角度分析Glide图片加载框架。如下内容: 如何阅读源码 Glide源码解析 如何阅读源码 那么,...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
一、简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫Glide的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。 二、 使用 dependencies { compile...
作者简介 原创微信公众号郭霖 WeChat ID: guolin_blog 现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还...
很多MM们都有长痘痘的苦恼,也经历过不少花样百出的战“痘”史。不过不科学的治疗方法只会带来更为严重的后果。 通常痘痘除了青春期身体荷尔蒙的刺激之外,就是身体本身的内分泌引起的,而后天原因引发的,无非是空气中的尘埃、洁面不净,熬夜,经常对着电子产品,以及没有使用安全的产品,或...
目标: 2017年4月——2017年6月实现 1.每月收入10000元 2.家族关系和谐 希望获得财富自由,享受喜悦照顾母亲安享晚年和扶养照顾孩子幸福成长,为家族和谐,自己家庭幸福和谐而努力!并希望通过目标的实现成为榜样!分享财富,发出光,分享爱让更多人学习实践种子法则实现...
亦爱亦恨是我痴心
午夜11点,不知道大家有没有类似的感觉,一会儿觉得自己超级牛逼,一会儿又觉得自己无比垃圾。小情绪密密麻麻,说来就来。思绪乱糟糟,没有什么条理逻辑。 夏天晚上的风吹到脸上,吹到手臂上,脖子上,很温和,凉凉柔柔的,像细细的沙冰,软绵绵的雪碧。闻到刚洗完衣服,洗衣液的味道,淡淡的...
夜深了,空气中嗅到了些许酸楚,低气压催生的情绪放大了悲伤。眼泪的滑落清楚了记忆,萌生了写点东西的念头。往昔如倒带划过脑海,搁浅在瞬间。有人说,我是个有故事的女生。我的故事很长,长到可能要听很久,久到或许要讲一辈子。你要听故事,那你定不能中途退场,因为我的故事中有你,你...}

我要回帖

更多关于 当你走过我身边 的文章

更多推荐

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

点击添加站长微信