Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
沉迷打码的小凳子
glide
提交
8e936252
G
glide
项目概览
沉迷打码的小凳子
/
glide
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
glide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8e936252
编写于
6月 12, 2014
作者:
S
Sam Judd
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Code cleanup
上级
fc3f0326
变更
15
显示空白变更内容
内联
并排
Showing
15 changed file
with
104 addition
and
54 deletion
+104
-54
library/src/main/java/com/bumptech/glide/load/resource/bitmap/StreamBitmapDecoder.java
...ptech/glide/load/resource/bitmap/StreamBitmapDecoder.java
+7
-1
library/src/main/java/com/bumptech/glide/load/resource/gif/GifData.java
...in/java/com/bumptech/glide/load/resource/gif/GifData.java
+1
-1
library/src/main/java/com/bumptech/glide/load/resource/gif/GifDataResource.java
...com/bumptech/glide/load/resource/gif/GifDataResource.java
+2
-2
library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
...ava/com/bumptech/glide/load/resource/gif/GifDrawable.java
+2
-2
library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java
...com/bumptech/glide/load/resource/gif/GifFrameManager.java
+37
-11
library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameModelLoader.java
...bumptech/glide/load/resource/gif/GifFrameModelLoader.java
+1
-1
library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceDecoder.java
.../bumptech/glide/load/resource/gif/GifResourceDecoder.java
+4
-3
library/src/main/java/com/bumptech/glide/load/resource/gif/decoder/GifDecoder.java
.../bumptech/glide/load/resource/gif/decoder/GifDecoder.java
+1
-1
library/src/main/java/com/bumptech/glide/load/resource/gifbitmap/GifBitmapWrapperTransformation.java
...ad/resource/gifbitmap/GifBitmapWrapperTransformation.java
+2
-2
library/src/test/java/com/bumptech/glide/GlideTest.java
library/src/test/java/com/bumptech/glide/GlideTest.java
+0
-4
library/src/test/java/com/bumptech/glide/load/resource/gif/GifDataResourceTest.java
...bumptech/glide/load/resource/gif/GifDataResourceTest.java
+3
-3
library/src/test/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java
...com/bumptech/glide/load/resource/gif/GifDrawableTest.java
+4
-4
library/src/test/java/com/bumptech/glide/load/resource/gif/GifFrameModelLoaderTest.java
...tech/glide/load/resource/gif/GifFrameModelLoaderTest.java
+40
-0
samples/flickr/res/layout/flickr_search_activity.xml
samples/flickr/res/layout/flickr_search_activity.xml
+0
-5
samples/flickr/src/main/java/com/bumptech/glide/samples/flickr/FlickrSearchActivity.java
...m/bumptech/glide/samples/flickr/FlickrSearchActivity.java
+0
-14
未找到文件。
library/src/main/java/com/bumptech/glide/load/resource/bitmap/StreamBitmapDecoder.java
浏览文件 @
8e936252
package
com.bumptech.glide.load.resource.bitmap
;
import
android.content.Context
;
import
android.graphics.Bitmap
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.Resource
;
import
com.bumptech.glide.load.DecodeFormat
;
import
com.bumptech.glide.load.ResourceDecoder
;
import
com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
;
import
com.bumptech.glide.load.DecodeFormat
;
import
java.io.InputStream
;
...
...
@@ -16,6 +18,10 @@ public class StreamBitmapDecoder implements ResourceDecoder<InputStream, Bitmap>
private
DecodeFormat
decodeFormat
;
private
String
id
;
public
StreamBitmapDecoder
(
Context
context
)
{
this
(
Glide
.
get
(
context
).
getBitmapPool
());
}
public
StreamBitmapDecoder
(
BitmapPool
bitmapPool
)
{
this
(
Downsampler
.
AT_LEAST
,
bitmapPool
,
DecodeFormat
.
PREFER_RGB_565
);
}
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/GifData.java
浏览文件 @
8e936252
...
...
@@ -47,7 +47,7 @@ public class GifData {
public
GifDrawable
getDrawable
()
{
GifDecoder
gifDecoder
=
new
GifDecoder
(
bitmapPool
);
gifDecoder
.
setData
(
gifId
,
header
,
data
);
GifFrameManager
frameManager
=
new
GifFrameManager
(
context
,
getFrameTransformation
());
GifFrameManager
frameManager
=
new
GifFrameManager
(
context
,
g
ifDecoder
,
g
etFrameTransformation
());
GifDrawable
result
=
new
GifDrawable
(
gifDecoder
,
frameManager
);
drawables
.
add
(
result
);
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/GifResource.java
→
library/src/main/java/com/bumptech/glide/load/resource/gif/Gif
Data
Resource.java
浏览文件 @
8e936252
...
...
@@ -2,10 +2,10 @@ package com.bumptech.glide.load.resource.gif;
import
com.bumptech.glide.Resource
;
public
class
GifResource
extends
Resource
<
GifData
>
{
public
class
Gif
Data
Resource
extends
Resource
<
GifData
>
{
private
GifData
gifData
;
public
GifResource
(
GifData
gifData
)
{
public
Gif
Data
Resource
(
GifData
gifData
)
{
this
.
gifData
=
gifData
;
}
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/GifDrawable.java
浏览文件 @
8e936252
...
...
@@ -29,7 +29,7 @@ public class GifDrawable extends Drawable implements Animatable, GifFrameManager
public
void
start
()
{
if
(!
isRunning
)
{
isRunning
=
true
;
frameManager
.
getNextFrame
(
decoder
,
this
);
frameManager
.
getNextFrame
(
this
);
invalidateSelf
();
}
}
...
...
@@ -102,7 +102,7 @@ public class GifDrawable extends Drawable implements Animatable, GifFrameManager
invalidateSelf
();
}
frameManager
.
getNextFrame
(
decoder
,
this
);
frameManager
.
getNextFrame
(
this
);
}
public
void
recycle
()
{
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameManager.java
浏览文件 @
8e936252
...
...
@@ -6,21 +6,32 @@ import android.os.Handler;
import
android.os.Looper
;
import
android.os.SystemClock
;
import
com.bumptech.glide.Glide
;
import
com.bumptech.glide.load.ResourceDecoder
;
import
com.bumptech.glide.load.ResourceEncoder
;
import
com.bumptech.glide.load.SkipCache
;
import
com.bumptech.glide.load.Transformation
;
import
com.bumptech.glide.load.engine.cache.MemorySizeCalculator
;
import
com.bumptech.glide.load.resource.NullCacheDecoder
;
import
com.bumptech.glide.load.resource.bitmap.BitmapEncoder
;
import
com.bumptech.glide.load.resource.bitmap.StreamBitmapDecoder
;
import
com.bumptech.glide.load.resource.gif.decoder.GifDecoder
;
import
com.bumptech.glide.request.target.SimpleTarget
;
import
java.io.InputStream
;
class
GifFrameManager
{
// 16ms per frame = 60fps
static
final
long
MIN_FRAME_DELAY
=
16
;
private
final
MemorySizeCalculator
calculator
;
private
final
GifFrameLoader
frameLoader
;
private
final
GifFrame
Model
Loader
frameLoader
;
private
final
GifFrameResourceDecoder
frameResourceDecoder
;
private
final
NullCacheDecoder
<
Bitmap
>
cacheDecoder
;
private
final
ResourceDecoder
<
InputStream
,
Bitmap
>
cacheDecoder
;
private
final
GifDecoder
decoder
;
private
final
Handler
mainHandler
;
private
final
ResourceEncoder
<
Bitmap
>
encoder
;
private
final
Context
context
;
private
Transformation
<
Bitmap
>
transformation
;
private
Context
context
;
private
DelayTarget
current
;
private
DelayTarget
next
;
...
...
@@ -28,31 +39,46 @@ class GifFrameManager {
public
void
onFrameRead
(
Bitmap
frame
);
}
public
GifFrameManager
(
Context
context
,
Transformation
<
Bitmap
>
transformation
)
{
this
(
context
,
new
Handler
(
Looper
.
getMainLooper
()),
transformation
);
public
GifFrameManager
(
Context
context
,
GifDecoder
decoder
,
Transformation
<
Bitmap
>
transformation
)
{
this
(
context
,
decoder
,
new
Handler
(
Looper
.
getMainLooper
()),
transformation
);
}
public
GifFrameManager
(
Context
context
,
Handler
mainHandler
,
public
GifFrameManager
(
Context
context
,
GifDecoder
decoder
,
Handler
mainHandler
,
Transformation
<
Bitmap
>
transformation
)
{
this
.
context
=
context
;
this
.
decoder
=
decoder
;
this
.
mainHandler
=
mainHandler
;
this
.
transformation
=
transformation
;
calculator
=
new
MemorySizeCalculator
(
context
);
frameLoader
=
new
GifFrameLoader
();
frameLoader
=
new
GifFrame
Model
Loader
();
frameResourceDecoder
=
new
GifFrameResourceDecoder
();
if
(!
decoder
.
isTransparent
())
{
// For non transparent gifs, we can beat the performance of our gif decoder for each frame by decoding jpegs
// from disk.
cacheDecoder
=
new
StreamBitmapDecoder
(
context
);
encoder
=
new
BitmapEncoder
(
Bitmap
.
CompressFormat
.
JPEG
,
70
);
}
else
{
// For transparent gifs, we would have to encode as pngs which is actually slower than our gif decoder so we
// avoid writing frames to the disk cache entirely.
cacheDecoder
=
NullCacheDecoder
.
get
();
encoder
=
SkipCache
.
get
();
}
}
Transformation
<
Bitmap
>
getTransformation
()
{
return
transformation
;
}
public
void
getNextFrame
(
final
GifDecoder
decoder
,
FrameCallback
cb
)
{
public
void
getNextFrame
(
FrameCallback
cb
)
{
decoder
.
advance
();
boolean
skipCache
=
decoder
.
getDecodedFrameByteSize
()
>
calculator
.
getMemoryCacheSize
()
/
2
;
// We don't want to blow out the entire memory cache with frames of gifs, so try to set some
// maximum size beyond which we will always just decode one frame at a time.
boolean
skipCache
=
decoder
.
getDecodedFramesByteSizeSum
()
>
calculator
.
getMemoryCacheSize
()
/
2
;
long
targetTime
=
SystemClock
.
uptimeMillis
()
+
(
Math
.
min
(
MIN_FRAME_DELAY
,
decoder
.
getNextDelay
()));
next
=
new
DelayTarget
(
decoder
,
cb
,
targetTime
,
mainHandler
);
Glide
.
with
(
context
)
.
using
(
frameLoader
,
GifDecoder
.
class
)
.
load
(
decoder
)
...
...
@@ -60,8 +86,8 @@ class GifFrameManager {
.
decoder
(
frameResourceDecoder
)
.
cacheDecoder
(
cacheDecoder
)
.
transform
(
transformation
)
.
encoder
(
encoder
)
.
skipMemoryCache
(
skipCache
)
.
skipDiskCache
(
true
)
.
into
(
next
);
}
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrameLoader.java
→
library/src/main/java/com/bumptech/glide/load/resource/gif/GifFrame
Model
Loader.java
浏览文件 @
8e936252
...
...
@@ -5,7 +5,7 @@ import com.bumptech.glide.load.data.DataFetcher;
import
com.bumptech.glide.load.model.ModelLoader
;
import
com.bumptech.glide.load.resource.gif.decoder.GifDecoder
;
public
class
GifFrameLoader
implements
ModelLoader
<
GifDecoder
,
GifDecoder
>
{
public
class
GifFrame
Model
Loader
implements
ModelLoader
<
GifDecoder
,
GifDecoder
>
{
@Override
public
DataFetcher
<
GifDecoder
>
getResourceFetcher
(
GifDecoder
model
,
int
width
,
int
height
)
{
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/GifResourceDecoder.java
浏览文件 @
8e936252
...
...
@@ -7,6 +7,7 @@ import com.bumptech.glide.load.ResourceDecoder;
import
com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
;
import
com.bumptech.glide.load.resource.gif.decoder.GifHeader
;
import
com.bumptech.glide.load.resource.gif.decoder.GifHeaderParser
;
import
com.bumptech.glide.util.Util
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
...
...
@@ -30,11 +31,11 @@ public class GifResourceDecoder implements ResourceDecoder<InputStream, GifData>
}
@Override
public
GifResource
decode
(
InputStream
source
,
int
width
,
int
height
)
throws
IOException
{
public
Gif
Data
Resource
decode
(
InputStream
source
,
int
width
,
int
height
)
throws
IOException
{
byte
[]
data
=
inputStreamToBytes
(
source
);
GifHeader
header
=
new
GifHeaderParser
(
data
).
parseHeader
();
String
id
=
getGifId
(
data
);
return
new
GifResource
(
new
GifData
(
context
,
bitmapPool
,
id
,
header
,
data
));
return
new
Gif
Data
Resource
(
new
GifData
(
context
,
bitmapPool
,
id
,
header
,
data
));
}
@Override
...
...
@@ -46,7 +47,7 @@ public class GifResourceDecoder implements ResourceDecoder<InputStream, GifData>
try
{
MessageDigest
digest
=
MessageDigest
.
getInstance
(
"SHA-1"
);
digest
.
update
(
data
);
return
new
String
(
digest
.
digest
());
return
Util
.
sha256BytesToHex
(
digest
.
digest
());
}
catch
(
NoSuchAlgorithmException
e
)
{
if
(
Log
.
isLoggable
(
TAG
,
Log
.
WARN
))
{
Log
.
w
(
TAG
,
"Missing sha1 algorithm?"
,
e
);
...
...
library/src/main/java/com/bumptech/glide/load/resource/gif/decoder/GifDecoder.java
浏览文件 @
8e936252
...
...
@@ -137,7 +137,7 @@ public class GifDecoder {
return
data
;
}
public
int
getDecodedFrame
ByteSize
()
{
public
int
getDecodedFrame
sByteSizeSum
()
{
// 4 == ARGB_8888, 2 == RGB_565
return
header
.
frameCount
*
header
.
width
*
header
.
height
*
(
header
.
isTransparent
?
4
:
2
);
}
...
...
library/src/main/java/com/bumptech/glide/load/resource/gifbitmap/GifBitmapWrapperTransformation.java
浏览文件 @
8e936252
...
...
@@ -6,7 +6,7 @@ import com.bumptech.glide.Resource;
import
com.bumptech.glide.load.MultiTransformation
;
import
com.bumptech.glide.load.Transformation
;
import
com.bumptech.glide.load.resource.gif.GifData
;
import
com.bumptech.glide.load.resource.gif.GifResource
;
import
com.bumptech.glide.load.resource.gif.Gif
Data
Resource
;
public
class
GifBitmapWrapperTransformation
implements
Transformation
<
GifBitmapWrapper
>
{
private
Context
context
;
...
...
@@ -33,7 +33,7 @@ public class GifBitmapWrapperTransformation implements Transformation<GifBitmapW
Transformation
<
Bitmap
>
newTransformation
=
new
MultiTransformation
<
Bitmap
>(
gifData
.
getFrameTransformation
(),
wrapped
);
gifData
.
setFrameTransformation
(
newTransformation
);
return
new
GifBitmapWrapperResource
(
new
GifBitmapWrapper
(
null
,
new
GifResource
(
gifData
)));
return
new
GifBitmapWrapperResource
(
new
GifBitmapWrapper
(
null
,
new
Gif
Data
Resource
(
gifData
)));
}
return
resource
;
}
...
...
library/src/test/java/com/bumptech/glide/GlideTest.java
浏览文件 @
8e936252
...
...
@@ -495,10 +495,6 @@ public class GlideTest {
Glide
.
with
(
getContext
()).
load
(
0.5f
).
into
(
target
);
}
@Test
public
void
testSomething
()
{
}
@Test
public
void
testNullModelDoesNotThrow
()
{
String
nullString
=
null
;
...
...
library/src/test/java/com/bumptech/glide/load/resource/gif/GifResourceTest.java
→
library/src/test/java/com/bumptech/glide/load/resource/gif/Gif
Data
ResourceTest.java
浏览文件 @
8e936252
...
...
@@ -12,14 +12,14 @@ import static org.mockito.Mockito.verify;
import
static
org
.
mockito
.
Mockito
.
when
;
@RunWith
(
RobolectricTestRunner
.
class
)
public
class
GifResourceTest
{
private
GifResource
resource
;
public
class
Gif
Data
ResourceTest
{
private
Gif
Data
Resource
resource
;
private
GifData
gifData
;
@Before
public
void
setUp
()
{
gifData
=
mock
(
GifData
.
class
);
resource
=
new
GifResource
(
gifData
);
resource
=
new
Gif
Data
Resource
(
gifData
);
}
@Test
...
...
library/src/test/java/com/bumptech/glide/load/resource/gif/GifDrawableTest.java
浏览文件 @
8e936252
...
...
@@ -66,7 +66,7 @@ public class GifDrawableTest {
public
void
testRequestsNextFrameOnStart
()
{
drawable
.
start
();
verify
(
frameManager
).
getNextFrame
(
eq
(
gifDecoder
),
eq
(
drawable
));
verify
(
frameManager
).
getNextFrame
(
eq
(
drawable
));
}
@Test
...
...
@@ -81,7 +81,7 @@ public class GifDrawableTest {
drawable
.
start
();
drawable
.
start
();
verify
(
frameManager
,
times
(
1
)).
getNextFrame
(
eq
(
gifDecoder
),
eq
(
drawable
));
verify
(
frameManager
,
times
(
1
)).
getNextFrame
(
eq
(
drawable
));
}
@Test
...
...
@@ -101,7 +101,7 @@ public class GifDrawableTest {
drawable
.
setIsRunning
(
true
);
drawable
.
onFrameRead
(
Bitmap
.
createBitmap
(
100
,
100
,
Bitmap
.
Config
.
ARGB_8888
));
verify
(
frameManager
).
getNextFrame
(
eq
(
gifDecoder
),
eq
(
drawable
));
verify
(
frameManager
).
getNextFrame
(
eq
(
drawable
));
}
@Test
...
...
@@ -117,7 +117,7 @@ public class GifDrawableTest {
drawable
.
setIsRunning
(
false
);
drawable
.
onFrameRead
(
Bitmap
.
createBitmap
(
10
,
100
,
Bitmap
.
Config
.
ARGB_8888
));
verify
(
frameManager
,
never
()).
getNextFrame
(
eq
(
gifDecoder
),
eq
(
drawable
));
verify
(
frameManager
,
never
()).
getNextFrame
(
eq
(
drawable
));
}
@Test
...
...
library/src/test/java/com/bumptech/glide/load/resource/gif/GifFrameModelLoaderTest.java
0 → 100644
浏览文件 @
8e936252
package
com.bumptech.glide.load.resource.gif
;
import
com.bumptech.glide.Priority
;
import
com.bumptech.glide.load.resource.gif.decoder.GifDecoder
;
import
org.junit.Before
;
import
org.junit.Test
;
import
static
junit
.
framework
.
Assert
.
assertEquals
;
import
static
junit
.
framework
.
Assert
.
assertTrue
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
when
;
public
class
GifFrameModelLoaderTest
{
private
GifFrameModelLoader
loader
;
private
GifDecoder
decoder
;
@Before
public
void
setUp
()
{
loader
=
new
GifFrameModelLoader
();
decoder
=
mock
(
GifDecoder
.
class
);
}
@Test
public
void
testIdIncludesGifDecoderIdAndFrameIndex
()
{
String
id
=
"asdfasd"
;
int
frameIndex
=
124
;
when
(
decoder
.
getId
()).
thenReturn
(
id
);
when
(
decoder
.
getCurrentFrameIndex
()).
thenReturn
(
frameIndex
);
String
loaderId
=
loader
.
getId
(
decoder
);
assertTrue
(
loaderId
.
contains
(
id
));
assertTrue
(
loaderId
.
contains
(
String
.
valueOf
(
frameIndex
)));
}
@Test
public
void
testAlwaysReturnsGivenDecoderFromFetcher
()
throws
Exception
{
assertEquals
(
decoder
,
loader
.
getResourceFetcher
(
decoder
,
100
,
100
).
loadData
(
Priority
.
NORMAL
));
}
}
samples/flickr/res/layout/flickr_search_activity.xml
浏览文件 @
8e936252
...
...
@@ -4,11 +4,6 @@
android:orientation=
"vertical"
android:layout_width=
"fill_parent"
android:layout_height=
"fill_parent"
>
<ImageView
android:id=
"@+id/test"
android:background=
"@android:color/holo_red_light"
android:layout_width=
"fill_parent"
android:layout_height=
"fill_parent"
/>
<LinearLayout
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
...
...
samples/flickr/src/main/java/com/bumptech/glide/samples/flickr/FlickrSearchActivity.java
浏览文件 @
8e936252
...
...
@@ -13,7 +13,6 @@ import android.view.View;
import
android.view.inputmethod.EditorInfo
;
import
android.widget.Button
;
import
android.widget.EditText
;
import
android.widget.ImageView
;
import
android.widget.TextView
;
import
com.actionbarsherlock.app.ActionBar
;
import
com.actionbarsherlock.app.SherlockFragmentActivity
;
...
...
@@ -76,19 +75,6 @@ public class FlickrSearchActivity extends SherlockFragmentActivity {
.
penaltyLog
()
.
build
());
ImageView
testView
=
(
ImageView
)
findViewById
(
R
.
id
.
test
);
// GifResourceDecoder decoder = new GifResourceDecoder(this);
// Glide.with(this)
// .using(Glide.buildStreamModelLoader(Integer.class, this), InputStream.class)
// .load(R.raw.cat)
// .as(GifData.class)
// .transcode(new GifDataDrawableTranscoder(), GifDrawable.class)
// .decoder(decoder)
// .cacheDecoder(decoder)
// .encoder(new GifResourceEncoder())
// .into(testView);
testView
.
setVisibility
(
View
.
GONE
);
Glide
.
get
(
this
).
register
(
Photo
.
class
,
InputStream
.
class
,
new
FlickrModelLoader
.
Factory
());
searching
=
findViewById
(
R
.
id
.
searching
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录