亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Glide最新版V4使用指南

 更新時(shí)間:2018年03月21日 14:14:46   作者:Jadyli1  
這篇文章主要介紹了詳解Glide最新版V4使用指南,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

概述

Glide是一個(gè)Android的圖片加載和緩存庫(kù),它主要專(zhuān)注于大量圖片的流暢加載,Glide幾乎可以勝任任何你需要使用到圖片從網(wǎng)絡(luò)拉取,壓縮,顯示的場(chǎng)景。

本文主要基于Glide4.0版本介紹其基本使用方法。

1 集成

Github地址: https://github.com/bumptech/glide

app或lib級(jí)別的build.gradle文件添加依賴(lài):

repositories {
 mavenCentral()
 maven { url 'https://maven.google.com' }
}

dependencies {
 compile 'com.github.bumptech.glide:glide:4.3.1'
 annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
}

Android Studio3.0使用:

dependencies {
 implementation 'com.github.bumptech.glide:glide:4.3.1'
 annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
}

使用implementation還是api需要視情況而定,implementation只能用于當(dāng)前module,如果在庫(kù)中以這種方式設(shè)置依賴(lài),那么在app的module是引用不到的,但是api可以,api相當(dāng)于compile。

在proguard.pro/proguard.cfg中添加混淆:

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
 **[] $VALUES;
 public *;
}

# for DexGuard only
-keepresourcexmlelements manifest/application/meta-data@value=GlideModule

2 基本用法

大多數(shù)情況下加載圖片只需要一行代碼:

Glide.with(fragment)
 .load(myUrl)
 .into(imageView);

取消加載也很簡(jiǎn)單:

Glide.with(fragment).clear(imageView);

實(shí)際上你并不需要取消加載。。。

因?yàn)楫?dāng)你在with方法中傳入的Activity或Fragment被銷(xiāo)毀的時(shí)候,Glide會(huì)自動(dòng)取消加載并且回收所有的加載過(guò)程中所使用的資源。

3 注解(V4新特性)和自定義方法

Glide使用了annotation processor來(lái)生成API,允許應(yīng)用修改RequestBuilder、RequestOptions和任意的包含在單一流式API庫(kù)中的方法。這是V4的特性,運(yùn)用注解后使用起來(lái)更方便:

GlideApp.with(fragment)
 .load(myUrl)
 .placeholder(R.drawable.placeholder)
 .fitCenter()
 .into(imageView);

Glidev4中的Glide.with().load()后沒(méi)有之前版本的fitCenter和placeholder這樣的方法,但是GlideApp有,可以直接在builder中使用。GlideApp可以代替之前版本的Glide開(kāi)頭。

這樣做的目的是:

1.對(duì)于library項(xiàng)目來(lái)講可以使用自定義方法繼承Glide的API
2.對(duì)于應(yīng)用來(lái)講,在繼承Glide的API后,可以通過(guò)添加自定義方法。

雖然你也可以手動(dòng)繼承RequestOptions,但是顯然這樣做更加麻煩,也破壞了流式API特性。

3.1 在項(xiàng)目中實(shí)現(xiàn)AppGlideModule:

@GlideModule
public class CustomGlideModule extends AppGlideModule {}

這個(gè)類(lèi)實(shí)現(xiàn)必須要有@GlideModule注解,如果你添加的方法失效,那就檢查下這里。

如果是library就實(shí)現(xiàn)LibraryGlideModule,以使用OkHttp為例:

@GlideModule
public final class OkHttpLibraryGlideModule extends LibraryGlideModule {
 @Override
 public void registerComponents(Context context, Registry registry) {
 registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory());
 }
}

OkHttpUrlLoader是Glide的OKHttp擴(kuò)展庫(kù)中的類(lèi),如果需要使用Glide的實(shí)現(xiàn),可以在依賴(lài)中添加:

compile 'com.github.bumptech.glide:okhttp3-integration:4.3.1'

Android Studio 3.0

implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.1'

添加完依賴(lài)不需要自己實(shí)現(xiàn)OkHttpLibraryGlideModule類(lèi),庫(kù)中已經(jīng)自帶了,會(huì)自動(dòng)使用OKHttp的。

然后編譯工程可以發(fā)現(xiàn)在build中生成了四個(gè)類(lèi):

3.2 GlideExtension

為了添加新的方法,修改已有的方法或者添加對(duì)其他類(lèi)型格式的支持,你需要在擴(kuò)展中使用加了注解的靜態(tài)方法。

GlideOption用來(lái)添加自定義的方法,GlideType用來(lái)支持新的格式。

3.2.1 GlideOption

先新建一個(gè)CustomGlideExtension類(lèi):

@GlideExtension
public class CustomGlideExtension {
 //縮略圖的最小尺寸,單位:px
 private static final int MINI_THUMB_SIZE = 100;

 /**
 * 將構(gòu)造方法設(shè)為私有,作為工具類(lèi)使用
 */
 private CustomGlideExtension() {
 }

 /**
 * 1.自己新增的方法的第一個(gè)參數(shù)必須是RequestOptions options
 * 2.方法必須是靜態(tài)的
 * @param options
 */
 @GlideOption
 public static void miniThumb(RequestOptions options) {
 options
 .fitCenter()
 .override(MINI_THUMB_SIZE);
 }
}

編譯工程,打開(kāi)build目錄中的GlideOptions,可以看見(jiàn)自動(dòng)生成了兩個(gè)方法:

public class GlideOptions extends RequestOptions {

 /**
 * @see CustomGlideExtension#miniThumb(RequestOptions)
 */
 public GlideOptions miniThumb() {
 CustomGlideExtension.miniThumb(this);
 return this;
 }

 /**
 * @see CustomGlideExtension#miniThumb(RequestOptions)
 */
 public static GlideOptions miniThumbOf() {
 return new GlideOptions().miniThumb();
 }
 ...
}

現(xiàn)在可以使用你自定義的方法了:

GlideApp.with(fragment)
 .load(url)
 .miniThumb(thumbnailSize)
 .into(imageView);

3.2.2 GlideType

以添加對(duì)GIF格式的支持為例,只是舉例,實(shí)際上API中已經(jīng)支持了。

在剛才的CustomGlideExtension類(lèi)中加上:

@GlideExtension
public class CustomGlideExtension {
 private static final RequestOptions DECODE_TYPE_GIF = GlideOptions.decodeTypeOf(GifDrawable.class).lock();
 @GlideType(GifDrawable.class)
 public static void asGIF(RequestBuilder<GifDrawable> requestBuilder) {
 requestBuilder
 .transition(new DrawableTransitionOptions())
 .apply(DECODE_TYPE_GIF);
 }
}

編譯工程,打開(kāi)build目錄中的GlideRequests,可以看見(jiàn)自動(dòng)生成了一個(gè)方法:

public class GlideRequests extends RequestManager {
 /**
 * @see CustomGlideExtension#asGIF(RequestBuilder)
 */
 public GlideRequest<GifDrawable> asGIF() {
 GlideRequest<GifDrawable> requestBuilder = this.as(GifDrawable.class);
 CustomGlideExtension.asGIF(requestBuilder);
 return requestBuilder;
 }
}

現(xiàn)在可以使用你添加的類(lèi)型了:

GlideApp.with(fragment)
 .asGIF()
 .load(url)
 .into(imageView);

4 占位符

占位符就是請(qǐng)求的圖片沒(méi)加載出來(lái)時(shí)顯示的默認(rèn)圖片。

Glide支持三種不同情況下的占位符:

  1. Placeholder 請(qǐng)求圖片加載中
  2. Error 請(qǐng)求圖片加載錯(cuò)誤
  3. Fallback 請(qǐng)求url/model為空

設(shè)置占位符:

GlideApp.with(fragment)
 .load(url)
 .placeholder(R.drawable.placeholder) 
 .error(new ColorDrawable(Color.RED))
 .fallback(new ColorDrawable(Color.GREY))
 .into(view);

之后的顯示優(yōu)先級(jí),我畫(huà)了個(gè)流程圖。

5 Options

5.1 RequestOptions

Glide中的大多請(qǐng)求參數(shù)都可以通過(guò)RequestOptions類(lèi)和apply()方法來(lái)設(shè)置。

Glide中的請(qǐng)求參數(shù)主要有:

  1. Placeholders 占位符
  2. Transformations 變換
  3. Caching Strategies 緩存策略
  4. 組件特定參數(shù):編碼質(zhì)量,解碼參數(shù)等。

比如,要將圖片的顯示方式設(shè)為CenterCrop,你可以這么做:

import static com.bumptech.glide.request.RequestOptions.centerCropTransform;

Glide.with(fragment)
 .load(url)
 .apply(centerCropTransform(context))
 .into(imageView);

但是其實(shí)完全可以在layout文件中設(shè)置ImageView為android:scaleType="centerCrop",Glide會(huì)自動(dòng)根據(jù)這個(gè)屬性設(shè)置圖片的顯示方式。

apply方法可以調(diào)用多次,但是如果兩次apply存在沖突的設(shè)置,會(huì)以最后一次為準(zhǔn)。

5.2 TransitionOptions

TransitionOptions決定圖片加載完成如何從占位符圖片(或者之前的圖片)過(guò)渡。

  1. 淡入
  2. 交叉淡入
  3. 不過(guò)渡
Glide.with(fragment)
 .load(url)
 .transition(DrawableTransitionOptions.withCrossFade())
 .into(view);

注意

TransitionOptions是和你要加載的資源的類(lèi)型綁定的,也就是說(shuō),如果你請(qǐng)求一張位圖(Bitmap),你就需要使用BitmapTransitionOptions,而不是DrawableTransitionOptions。因此,你請(qǐng)求的這張位圖,你需要用簡(jiǎn)單的淡入,而不能用 交叉淡入(DrawableTransitionOptions.withCrossFade())。

如果既不是Bitmap也不是Drawable可以使用GenericTransitionOptions

5.3 RequestBuilder

作用:

  1. 指定加載類(lèi)型。asBitmap()、asGif()、asDrawable()、asFile()。
  2. 指定要加載url/model。
  3. 指定要加載到那個(gè)View。
  4. 指定要應(yīng)用的RequestOption
  5. 指定要應(yīng)用的TransitionOption
  6. 指定要加載的縮略圖

那么如何得到RequestBuilder呢?

RequestBuilder<Drawable> requestBuilder = Glide.with(fragment);

默認(rèn)得到一個(gè)Drawable RequestBuilder,如果要指定類(lèi)型為Bitmap,可以這樣寫(xiě):

RequestBuilder<Bitmap> requestBuilder = Glide.with(fragment).asBitmap();

應(yīng)用RequestOptions

RequestBuilder<Drawable> requestBuilder = Glide.with(fragment);
requestBuilder.apply(requestOptions);
requestBuilder.transition(transitionOptions);

RequestBuilder也可以重復(fù)使用:

RequestBuilder<Drawable> requestBuilder =
 Glide.with(fragment)
  .asDrawable()
  .apply(requestOptions);

for (int i = 0; i < numViews; i++) {
 ImageView view = viewGroup.getChildAt(i);
 String url = urls.get(i);
 requestBuilder.load(url).into(view);
}

6 Transformations

Glide會(huì)自動(dòng)讀取ImageView的縮放類(lèi)型,所以一般在layout文件指定scaleType即可。

CenterCrop, CenterInside, CircleCrop, FitCenter, RoundedCorners

Glide支持在java代碼中設(shè)置這些縮放類(lèi)型:

  1. CenterCrop 縮放寬和高都到達(dá)View的邊界,有一個(gè)參數(shù)在邊界上,另一個(gè)參數(shù)可能在邊界上,也可能超過(guò)邊界
  2. CenterInside 如果寬和高都在View的邊界內(nèi),那就不縮放,否則縮放寬和高都進(jìn)入View的邊界,有一個(gè)參數(shù)在邊界上,另一個(gè)參數(shù)可能在邊界上,也可能在邊界內(nèi)
  3. CircleCrop 圓形且結(jié)合了CenterCrop的特性
  4. FitCenter 縮放寬和高都進(jìn)入View的邊界,有一個(gè)參數(shù)在邊界上,另一個(gè)參數(shù)可能在邊界上,也可能在邊界內(nèi)
  5. RoundedCorners 圓角

有三種用法:

1 使用RequestOptions

RequestOptions options = new RequestOptions();
options.centerCrop();

Glide.with(fragment)
 .load(url)
 .apply(options)
 .into(imageView);

2 使用RequestOptions中的transform方法

Glide.with(fragment)
 .load(url)
 .apply(RequestOptions.fitCenterTransform())
 .into(imageView);

3 V4特性

GlideApp.with(fragment)
 .load(url)
 .fitCenter()
 .into(imageView);

第三種方法最簡(jiǎn)便,推薦。

多個(gè)變換

Glide.with(fragment)
 .load(url)
 .transform(new MultiTransformation(new FitCenter(), new YourCustomTransformation())
 .into(imageView);

7 Transitions(動(dòng)畫(huà))

普通動(dòng)畫(huà)

Glide中的過(guò)渡動(dòng)畫(huà)是指占位符到請(qǐng)求圖片或縮略圖到完整尺寸請(qǐng)求圖片的動(dòng)畫(huà)。過(guò)渡動(dòng)畫(huà)只能針對(duì)單一請(qǐng)求,不能跨請(qǐng)求執(zhí)行。

過(guò)渡動(dòng)畫(huà)執(zhí)行時(shí)機(jī):

1.圖片在磁盤(pán)緩存
2.圖片在本地
3.圖片在遠(yuǎn)程

如果圖片在內(nèi)存緩存上是不會(huì)執(zhí)行過(guò)渡動(dòng)畫(huà)的。如果需要在內(nèi)存緩存上加載動(dòng)畫(huà),可以這樣:

GlideApp.with(this).load(R.drawable.img_default).listener(new RequestListener(){

 @Override
 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
 return false;
 }

 @Override
 public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
 if (dataSource == DataSource.MEMORY_CACHE) {
  //當(dāng)圖片位于內(nèi)存緩存時(shí),glide默認(rèn)不會(huì)加載動(dòng)畫(huà)
  imageView.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in));
 }
 return false;
 }
}).fitCenter().transition(GenericTransitionOptions.with(R.anim.fade_in)).into(imageView);

通常的用法如下:

Glide.with(fragment)
 .load(url)
 .transition(DrawableTransitionOptions.withCrossFade())
 .into(view);

TransitionOptions的介紹:TransitionOptions。有三種TransitionOptions:

  1. GenericTransitionOptions 通用型
  2. DrawableTransitionOptions
  3. BitmapTransitionOptions

如果要使用自定義的動(dòng)畫(huà),可以使用GenericTransitionOptions.with(int viewAnimationId)或者BitmapTransitionOptions.withCrossFade(int animationId, int duration)或者DrawableTransitionOptions.withCrossFade(int animationId, int duration)。

出于性能考慮,最好不要在ListView,GridView,RecycleView中使用過(guò)渡動(dòng)畫(huà),使用TransitionOptions.dontTransition()可以不加載動(dòng)畫(huà),也可以使用dontAnimate不加載動(dòng)畫(huà)

GlideApp.with(mContext)
 .load(imgUrl)
 .placeholder(R.drawable.img_default)
 .dontAnimate()
 .into(holder.imageview);

自定義過(guò)渡動(dòng)畫(huà)

1.實(shí)現(xiàn)TransitionFactory
2.重寫(xiě)build()

可以控制圖片在內(nèi)存緩存上是否執(zhí)行動(dòng)畫(huà)。

具體寫(xiě)法參考DrawableCrossFadeFactory,然后調(diào)用TransitionOptions的with(TransitionFactory transitionFactory)加載。

8 基本配置

8.1 配置內(nèi)存緩存

Glide會(huì)自動(dòng)合理分配內(nèi)存緩存,但是也可以自己手動(dòng)分配。

方法一

通過(guò)MemorySizeCalculator設(shè)置

@GlideModule
public class CustomGlideModule extends AppGlideModule {
 @Override
 public void applyOptions(Context context, GlideBuilder builder) {
 MemorySizeCalculator calculator = new MemorySizeCalculator.Builder(context)
  .setMemoryCacheScreens(2)
  .build();
 builder.setMemoryCache(new LruResourceCache(calculator.getMemoryCacheSize()));
 }
}

setMemoryCacheScreens設(shè)置MemoryCache應(yīng)該能夠容納的像素值的設(shè)備屏幕數(shù),說(shuō)白了就是緩存多少屏圖片,默認(rèn)值是2。

方法二

@GlideModule
public class CustomGlideModule extends AppGlideModule {
 @Override
 public void applyOptions(Context context, GlideBuilder builder) {
 int memoryCacheSizeBytes = 1024 * 1024 * 20; // 20mb
 builder.setMemoryCache(new LruResourceCache(memoryCacheSizeBytes));
 }
}

方法三

@GlideModule
public class YourAppGlideModule extends AppGlideModule {
 @Override
 public void applyOptions(Context context, GlideBuilder builder) {
 builder.setMemoryCache(new CustomGlideMemoryCache());
 }
}

自己實(shí)現(xiàn)MemoryCache接口。

清理內(nèi)存緩存,在主線(xiàn)程調(diào)用:

GlideApp.get(context).clearMemory();

在使用的時(shí)候,可以跳過(guò)內(nèi)存緩存:

 GlideApp.with(getActivity())
  .load(url)
  .skipMemoryCache(true)
  .dontAnimate()
  .centerCrop()
  .into(imageView);

8.2 磁盤(pán)緩存

Glide使用DiskLruCacheWrapper作為默認(rèn)的磁盤(pán)緩存,默認(rèn)大小是250M,緩存文件放在A(yíng)PP的緩存文件夾下。

@GlideModule
public class CustomGlideModule extends AppGlideModule {
 @Override
 public void applyOptions(Context context, GlideBuilder builder) {
 int diskCacheSizeBytes = 1024 * 1024 * 100; // 100 MB
 builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
// builder.setDiskCache(new InternalCacheDiskCacheFactory(context, "cacheFolderName", diskCacheSizeBytes));
// builder.setDiskCache(new ExternalCacheDiskCacheFactory(context));
 }
}

用法如上,可以指定緩存在內(nèi)部存儲(chǔ)或外部存儲(chǔ),也可以指定緩存大小和文件夾。

自定義磁盤(pán)緩存

@GlideModule
public class CustomGlideModule extends AppGlideModule {
 @Override
 public void applyOptions(Context context, GlideBuilder builder) {
 builder.setDiskCache(new DiskCache.Factory() {
 @Override
 public DiskCache build() {
  return new YourAppCustomDiskCache();
 }
 });
 }
}

 自己實(shí)現(xiàn)DiskCache接口。

清理磁盤(pán)緩存,在子線(xiàn)程調(diào)用:

GlideApp.get(context).clearDiskCache();

加載圖片時(shí)設(shè)置磁盤(pán)緩存策略:

GlideApp.with(getActivity())
  .load(url)
  .diskCacheStrategy(DiskCacheStrategy.ALL)
  .dontAnimate()
  .centerCrop()
  .into(imageView);

默認(rèn)的策略是DiskCacheStrategy.AUTOMATIC

DiskCacheStrategy有五個(gè)常量:

  1. DiskCacheStrategy.ALL 使用DATA和RESOURCE緩存遠(yuǎn)程數(shù)據(jù),僅使用RESOURCE來(lái)緩存本地?cái)?shù)據(jù)。
  2. DiskCacheStrategy.NONE 不使用磁盤(pán)緩存
  3. DiskCacheStrategy.DATA 在資源解碼前就將原始數(shù)據(jù)寫(xiě)入磁盤(pán)緩存
  4. DiskCacheStrategy.RESOURCE 在資源解碼后將數(shù)據(jù)寫(xiě)入磁盤(pán)緩存,即經(jīng)過(guò)縮放等轉(zhuǎn)換后的圖片資源。
  5. DiskCacheStrategy.AUTOMATIC 根據(jù)原始圖片數(shù)據(jù)和資源編碼策略來(lái)自動(dòng)選擇磁盤(pán)緩存策略。

8.3 禁止解析Manifest文件

主要針對(duì)V3升級(jí)到v4的用戶(hù),可以提升初始化速度,避免一些潛在錯(cuò)誤。

@GlideModule
public class CustomGlideModule extends AppGlideModule {
 @Override
 public boolean isManifestParsingEnabled() {
 return false;
 }
}

8.4 View尺寸

Glide對(duì)ImageView的width和height屬性是這樣解析的:

  1. 如果width和height都大于0,則使用layout中的尺寸。
  2. 如果width和height都是WRAP_CONTENT,則使用屏幕尺寸。
  3. 如果width和height中至少有一個(gè)值<=0并且不是WRAP_CONTENT,那么就會(huì)在布局的時(shí)候添加一個(gè)OnPreDrawListener監(jiān)聽(tīng)I(yíng)mageView的尺寸

Glide對(duì)WRAP_CONTENT的支持并不好,所以盡量不要用。

那么如何在運(yùn)行修改ImageView尺寸呢?

方法一 繼承ImageViewTarget

我這里指定的View的類(lèi)型是ImageView,資源類(lèi)型是Bitmap,可根據(jù)需要修改,onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition)方法中可以通過(guò)bitmap獲取圖片的尺寸。

public class CustomImageViewTarget extends ImageViewTarget<Bitmap> {

 private int width, height;

 public CustomImageViewTarget(ImageView view) {
  super(view);
 }

 public CustomImageViewTarget(ImageView view, int width, int height) {
  super(view);
  this.width = width;
  this.height = height;
 }

 @Override
 public void onResourceReady(Bitmap bitmap, Transition<? super Bitmap> transition) {
  super.onResourceReady(bitmap,transition);
 }

 @Override
 protected void setResource(@Nullable Bitmap resource) {
  view.setImageBitmap(resource);
 }

 @Override
 public void getSize(SizeReadyCallback cb) {
  if (width > 0 && height > 0) {
  cb.onSizeReady(width, height);
  return;
  }
  super.getSize(cb);
 }
 }

使用:

GlideApp.with(context)
 .asBitmap()
 .load(url)
 .dontAnimate()
 .placeholder(R.drawable.img_default)
 .into(new CustomImageViewTarget(imageview, 300, 300));

方法二 使用override()

GlideApp.with(mContext)
 .load(url)
 .override(width,height)
 .into(view);

獲取bitmap

如果只想用Glide解析url獲取一個(gè)bitmap,然后自己對(duì)其進(jìn)行處理,可以使用SimpleTarget<Z>,

/**
 * Constructor for the target that uses {@link Target#SIZE_ORIGINAL} as the target width and
 * height.
 */
 public SimpleTarget() {
 this(SIZE_ORIGINAL, SIZE_ORIGINAL);
 }

 /**
 * Constructor for the target that takes the desired dimensions of the decoded and/or transformed
 * resource.
 *
 * @param width The width in pixels of the desired resource.
 * @param height The height in pixels of the desired resource.
 */
 public SimpleTarget(int width, int height) {
 this.width = width;
 this.height = height;
 }

SimpleTarget也可以指定寬和高,用法示例:

Glide.with(itemView.getContext()).asBitmap().load(url).into(new SimpleTarget<Bitmap>() {
 @Override
 public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {

 }
});

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android使用SkinManager實(shí)現(xiàn)換膚功能的示例

    android使用SkinManager實(shí)現(xiàn)換膚功能的示例

    本篇文章主要介紹了android使用SkinManager實(shí)現(xiàn)換膚功能的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • Android ANR原理分析

    Android ANR原理分析

    ANR即Application Not Responding,顧名思義就是應(yīng)用程序無(wú)響應(yīng)。在A(yíng)ndroid中,一般情況下,四大組件均是工作在主線(xiàn)程中的,Android會(huì)隨時(shí)監(jiān)控應(yīng)用程序的響應(yīng)情況,如果因?yàn)橐恍┖臅r(shí)操作,那么系統(tǒng)就會(huì)顯示ANR對(duì)話(huà)框提示用戶(hù)對(duì)應(yīng)的應(yīng)用處于無(wú)響應(yīng)狀態(tài)
    2021-06-06
  • android自定義進(jìn)度條漸變圓形

    android自定義進(jìn)度條漸變圓形

    這篇文章主要介紹了android自定義進(jìn)度條漸變圓形,需要的朋友可以來(lái)參考下
    2015-08-08
  • Android中使用ListView實(shí)現(xiàn)漂亮的表格效果

    Android中使用ListView實(shí)現(xiàn)漂亮的表格效果

    這篇文章主要介紹了Android中使用ListView實(shí)現(xiàn)漂亮的表格效果,本文用詳細(xì)的代碼實(shí)例創(chuàng)建了一個(gè)股票行情表格,需要的朋友可以參考下
    2014-10-10
  • Android實(shí)現(xiàn)局部模糊效果

    Android實(shí)現(xiàn)局部模糊效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)局部模糊效果,幫助大家實(shí)現(xiàn)模糊或者毛玻璃效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android中Service實(shí)時(shí)向Activity傳遞數(shù)據(jù)實(shí)例分析

    Android中Service實(shí)時(shí)向Activity傳遞數(shù)據(jù)實(shí)例分析

    這篇文章主要介紹了Android中Service實(shí)時(shí)向Activity傳遞數(shù)據(jù)的方法,實(shí)例分析了Service組件基于線(xiàn)程操作實(shí)現(xiàn)數(shù)值實(shí)時(shí)傳遞的相關(guān)技巧,需要的朋友可以參考下
    2015-09-09
  • Android選擇與上傳圖片之PictureSelector教程

    Android選擇與上傳圖片之PictureSelector教程

    這篇文章主要介紹了在A(yíng)ndroid中對(duì)于圖片的選擇與上傳方法,本文介紹了PictureSelector的相關(guān)使用教程,學(xué)習(xí)Android的同學(xué)進(jìn)來(lái)看看吧
    2021-08-08
  • android listview進(jìn)階實(shí)例分享

    android listview進(jìn)階實(shí)例分享

    這篇文章主要介紹了android listview進(jìn)階實(shí)例分享,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • ANDROID 完美退出APP的實(shí)例代碼

    ANDROID 完美退出APP的實(shí)例代碼

    這篇文章介紹了ANDROID 完美退出APP的實(shí)例代碼,有需要的朋友可以參考一下
    2013-08-08
  • Android源碼解析onResume方法中獲取不到View寬高

    Android源碼解析onResume方法中獲取不到View寬高

    這篇文章主要為大家介紹了Android源碼解析onResume方法中獲取不到View寬高示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評(píng)論