From fa6cc8dfafcb16edd55bafe47ae197282329204d Mon Sep 17 00:00:00 2001 From: khy <18814188563@163.com> Date: Mon, 11 Jul 2016 17:26:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E6=AD=A3=E6=96=87?= =?UTF-8?q?=E5=AD=97=E5=8F=B7=E8=AE=BE=E7=BD=AE=EF=BC=8C=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?Gif=EF=BC=8CHttpdns=E9=98=B2=E6=AD=A2=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=8A=AB=E6=8C=81=EF=BC=8C=E6=B8=B8=E6=88=8F=E6=88=AA=E5=9B=BE?= =?UTF-8?q?=E6=A8=AA=E5=B1=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- .../alicloud-android-sdk-httpdns-1.0.6.jar | Bin 0 -> 12855 bytes app/libs/utdid4all-1.0.4.jar | Bin 0 -> 50843 bytes app/src/main/AndroidManifest.xml | 2 + .../java/com/gh/common/util/HttpdnsUtils.java | 35 +++++ .../java/com/gh/common/util/ImageUtils.java | 101 ++++++++++++-- .../java/com/gh/download/DownloadThread.java | 19 ++- .../java/com/gh/gamecenter/NewsActivity.java | 51 ++++++- .../com/gh/gamecenter/SettingActivity.java | 88 +++++++++---- .../com/gh/gamecenter/ViewImageActivity.java | 124 ++++++++++++++---- app/src/main/res/layout/dialog_font_size.xml | 16 +-- app/src/main/res/layout/viewimage_item.xml | 11 +- 12 files changed, 355 insertions(+), 96 deletions(-) create mode 100644 app/libs/alicloud-android-sdk-httpdns-1.0.6.jar create mode 100644 app/libs/utdid4all-1.0.4.jar create mode 100644 app/src/main/java/com/gh/common/util/HttpdnsUtils.java diff --git a/app/build.gradle b/app/build.gradle index 7e835f5afa..96847bf8b6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -108,7 +108,5 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' -// compile ('com.facebook.fresco:fresco:0.9.0') { -// exclude module: 'support-v4' -// } + compile 'pl.droidsonroids.gif:android-gif-drawable:1.1.16' } \ No newline at end of file diff --git a/app/libs/alicloud-android-sdk-httpdns-1.0.6.jar b/app/libs/alicloud-android-sdk-httpdns-1.0.6.jar new file mode 100644 index 0000000000000000000000000000000000000000..da9bda3804bd1f9bb9adc571b57297875311b89e GIT binary patch literal 12855 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 z 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 literal 0 HcmV?d00001 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 46f1c527aa..c30fd6ea9e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,6 +38,8 @@ + + > imageCache = new ArrayMap>(); ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5); @@ -39,18 +45,21 @@ public class ImageUtils { return singleton; } - private ImageUtils(Context context, int size) { + private ImageUtils(Context context, int size) { options = new DisplayImageOptions.Builder().cacheInMemory(true) .cacheOnDisk(true).considerExifParams(true) .bitmapConfig(Bitmap.Config.RGB_565) + .imageScaleType(ImageScaleType.IN_SAMPLE_INT) // .showImageOnLoading(R.drawable.ocupy) // .showImageForEmptyUri(R.drawable.ocupy) // .showImageOnFail(R.drawable.ocupy) .build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( - context).writeDebugLogs().build(); + context).writeDebugLogs() + .memoryCacheExtraOptions(480, 800) + .build(); ImageLoader.getInstance().init(config); imageLoader = ImageLoader.getInstance(); @@ -130,17 +139,81 @@ public class ImageUtils { }); } - public void display(String url, ImageView imageView, ScaleType scaleType) { - display(url, imageView, R.drawable.ocupy, scaleType, null); - } + public void display(final String url, final ImageView imageView, + final int drawable, final ScaleType scaleType, + final OnLoadingCompleteListener listener, final int i) { + imageLoader.displayImage(url, imageView, options, + new ImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + WeakReference bitmapWeakReference = imageCache.get(imageUri); + try { + if (bitmapWeakReference!=null){ + Bitmap bitmap = bitmapWeakReference.get(); + imageView.setImageBitmap(bitmap); + }else { + Matrix m = new Matrix(); + m.setRotate(i, (float) loadedImage.getWidth() / 2, (float) loadedImage.getHeight() / 2); + Bitmap bm1 = Bitmap.createBitmap(loadedImage, 0, 0, loadedImage.getWidth(), loadedImage.getHeight(), m, true); + imageView.setImageBitmap(bm1); + WeakReference weakBM = new WeakReference(bm1); + imageCache.put(imageUri, weakBM); + } - public void display(String url, ImageView imageView) { - display(url, imageView, R.drawable.ocupy, ScaleType.FIT_XY, null); - } + } catch (OutOfMemoryError ex) { + Utils.log("Bitmap:::内存溢出"); + } catch (Exception e) { + e.printStackTrace(); + } + if (imageView instanceof CircleImageView) { + imageView.setScaleType(ScaleType.CENTER_CROP); + } else { + imageView.setScaleType(scaleType); + } + if (listener != null) { + listener.onLoadingComplete(); + } + } - public void display(String url, ImageView imageView, ScaleType scaleType, OnLoadingCompleteListener listener) { - display(url, imageView, R.drawable.ocupy, scaleType, listener); - } + @Override + public void onLoadingStarted(String imageUri, View view) { + imageView.setScaleType(ScaleType.CENTER); + if (drawable != -1) { + imageView.setImageResource(drawable); + } + } + + @Override + public void onLoadingCancelled(String imageUri, View view) { + + } + + @Override + public void onLoadingFailed(String imageUri, View view, + FailReason reason) { + + } + }); + } + + + public void display(String url, ImageView imageView, ScaleType scaleType) { + display(url, imageView, R.drawable.ocupy, scaleType, null); + } + + public void display(String url, ImageView imageView) { + display(url, imageView, R.drawable.ocupy, ScaleType.FIT_XY, null); + } + + //旋转图片 i表示角度 + public void display(String url, ImageView imageView, int i, boolean isHorizontal) { + display(url, imageView, R.drawable.ocupy, ScaleType.FIT_XY, null, i); + } + + public void display(String url, ImageView imageView, ScaleType scaleType, OnLoadingCompleteListener listener) { + display(url, imageView, R.drawable.ocupy, scaleType, listener); + } public void display(String url, ImageView imageView, OnLoadingCompleteListener listener) { display(url, imageView, R.drawable.ocupy, ScaleType.FIT_XY, listener); diff --git a/app/src/main/java/com/gh/download/DownloadThread.java b/app/src/main/java/com/gh/download/DownloadThread.java index 02c89ff86a..dec015efd8 100644 --- a/app/src/main/java/com/gh/download/DownloadThread.java +++ b/app/src/main/java/com/gh/download/DownloadThread.java @@ -4,6 +4,7 @@ import android.content.Context; import android.text.TextUtils; import android.util.Log; +import com.gh.common.util.HttpdnsUtils; import com.gh.common.util.Trace; import com.gh.common.util.Utils; @@ -52,14 +53,28 @@ public class DownloadThread extends Thread { fileOutputStream = new FileOutputStream(entry.getPath()); } + //Httpdns替换地址 + String newUrl = HttpdnsUtils.getUrls(context, entry.getUrl()); + if (newUrl == null){ + newUrl = entry.getUrl(); + Utils.log("HttpDnsService::获取新地址失败,用原地址进行下载,原地址为::"+newUrl); + }else { + Utils.log("HttpDnsService::获取新地址成功,目标地址为::"+newUrl); + } + URL url = new URL(entry.getUrl()); - HttpURLConnection connection = (HttpURLConnection) url - .openConnection(); +// HttpURLConnection connection = (HttpURLConnection) url +// .openConnection(); + HttpURLConnection connection = (HttpURLConnection) new URL(newUrl).openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(CONNECT_TIME); connection.setReadTimeout(READ_TIME); connection.setRequestProperty("RANGE", "bytes=" + targetFile.length() + "-"); + + // 设置HTTP请求头Host域 + connection.setRequestProperty("Host",url.getHost()); + //设置自动重定向 connection.setInstanceFollowRedirects(true); Trace.getInstance().debug(DownloadThread.class.getSimpleName(), diff --git a/app/src/main/java/com/gh/gamecenter/NewsActivity.java b/app/src/main/java/com/gh/gamecenter/NewsActivity.java index 70be43d390..cffc9ba024 100644 --- a/app/src/main/java/com/gh/gamecenter/NewsActivity.java +++ b/app/src/main/java/com/gh/gamecenter/NewsActivity.java @@ -1,8 +1,10 @@ package com.gh.gamecenter; +import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -32,6 +34,7 @@ import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; +import android.widget.Toast; import com.android.volley.NoConnectionError; import com.android.volley.Response; @@ -135,8 +138,10 @@ public class NewsActivity extends BaseActivity implements OnClickListener { private double R11; private int mActivePointerId; private WebSettings webSettings; - private int defaultTextZoom = 100; + private int defaultTextZoom = 85; private int scrollSize = 300;//滑动距离超过300触发事件(放大缩小字体) + private SharedPreferences sp; + private int fontsize; private DataWatcher dataWatcher = new DataWatcher() { @Override @@ -241,6 +246,31 @@ public class NewsActivity extends BaseActivity implements OnClickListener { } }); } + sp = getSharedPreferences(Config.PREFERENCE, Activity.MODE_PRIVATE); + fontsize = sp.getInt("fontsize",1); + if (fontsize == 0){ + fontsize = 1; + } + } + + private void saveFontSize(int size){ + SharedPreferences.Editor edit = sp.edit(); + edit.putInt("fontsize",size); + edit.apply(); + } + private String getFontSize(int i){ + switch (i){ + case 1: + return "小字号"; + case 2: + return "中字号"; + case 3: + return "大字号"; + case 4: + return "特大字号"; + default: + return "未知字号"; + } } /** @@ -270,13 +300,19 @@ public class NewsActivity extends BaseActivity implements OnClickListener { float R2 = (X2 * X2) + (Y2 * Y2); double R12 = Math.sqrt(R2); if (isSecondDown && webSettings != null) { - if ((R11 - R12) > scrollSize) { - defaultTextZoom -= 10; - webSettings.setTextZoom(defaultTextZoom); + if ((R11 - R12) > scrollSize&&fontsize>1) { + fontsize --; + webSettings.setTextZoom(defaultTextZoom+15*fontsize); + saveFontSize(fontsize); + String fontSizeText = getFontSize(fontsize); + Toast.makeText(this,fontSizeText,Toast.LENGTH_SHORT).show(); } - if ((R11 - R12) < -scrollSize) { - defaultTextZoom += 10; - webSettings.setTextZoom(defaultTextZoom); + if ((R11 - R12) < -scrollSize&&fontsize<4) { + fontsize ++; + webSettings.setTextZoom(defaultTextZoom+15*fontsize); + saveFontSize(fontsize); + String fontSizeText = getFontSize(fontsize); + Toast.makeText(this,fontSizeText,Toast.LENGTH_SHORT).show(); } } break; @@ -1032,6 +1068,7 @@ public class NewsActivity extends BaseActivity implements OnClickListener { webSettings = holder.essaydetails_wv_content.getSettings(); webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); webSettings.setJavaScriptEnabled(true); + webSettings.setTextZoom(defaultTextZoom+fontsize*15); holder.essaydetails_wv_content.loadDataWithBaseURL(null, entity.getContent(), "text/html", "utf-8", null); holder.essaydetails_wv_content.setWebViewClient(new WebViewClient() { @Override diff --git a/app/src/main/java/com/gh/gamecenter/SettingActivity.java b/app/src/main/java/com/gh/gamecenter/SettingActivity.java index 03261f22b1..b84d53a887 100644 --- a/app/src/main/java/com/gh/gamecenter/SettingActivity.java +++ b/app/src/main/java/com/gh/gamecenter/SettingActivity.java @@ -15,9 +15,9 @@ import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.ProgressBar; +import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.TextView; -import android.widget.Toast; import com.android.volley.Response; import com.android.volley.VolleyError; @@ -59,7 +59,7 @@ public class SettingActivity extends BaseActivity implements OnClickListener { private SwitchButton setting_sb_autoinstall, setting_sb_autodelete, setting_sb_deletedata, setting_sb_autoupdate; private TextView setting_tv_version, app_tv_speed, app_tv_percent, - app_btn_cancel, setting_tv_cache; + app_btn_cancel, setting_tv_cache,setting_tv_size; private ProgressBar app_pb_progress; private SharedPreferences sp; @@ -73,6 +73,8 @@ public class SettingActivity extends BaseActivity implements OnClickListener { private Handler handler = new Handler(); + private int checkSizeIndex; + private DataWatcher dataWatcher = new DataWatcher() { @Override @@ -147,12 +149,17 @@ public class SettingActivity extends BaseActivity implements OnClickListener { setting_sb_autodelete.setChecked(sp.getBoolean("autodelete", true)); setting_sb_deletedata.setChecked(sp.getBoolean("deletedata", true)); setting_sb_autoupdate.setChecked(sp.getBoolean("autoupdate", true)); + checkSizeIndex = sp.getInt("fontsize",1); if (sp.getBoolean("isShowDisclaimer", false)) { TextView setting_tv_disclaimer = (TextView) findViewById(R.id.setting_tv_disclaimer); setting_tv_disclaimer.setVisibility(View.VISIBLE); setting_tv_disclaimer.setOnClickListener(this); } + if (checkSizeIndex == 0){ + checkSizeIndex = 1; + } + fontTextSize(checkSizeIndex); } // 获取缓存大小 @@ -196,6 +203,7 @@ public class SettingActivity extends BaseActivity implements OnClickListener { mEditor.putBoolean("autodelete", setting_sb_autodelete.isChecked()); mEditor.putBoolean("deletedata", setting_sb_deletedata.isChecked()); mEditor.putBoolean("autoupdate", setting_sb_autoupdate.isChecked()); + mEditor.putInt("fontsize",checkSizeIndex); mEditor.apply(); } @@ -239,38 +247,62 @@ public class SettingActivity extends BaseActivity implements OnClickListener { } break; case R.id.setting_rl_font_size: - final Dialog dialog = new Dialog(this); - View inflate = LayoutInflater.from(this).inflate(R.layout.dialog_font_size, null); - TextView tv_negative = (TextView) inflate.findViewById(R.id.font_size_negative); - TextView tv_positive = (TextView) inflate.findViewById(R.id.font_size_positive); - final RadioGroup radioGroup = (RadioGroup) inflate.findViewById(R.id.font_size_radiogroup); - tv_negative.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - dialog.cancel(); - } - }); - tv_positive.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId(); - int index = checkedRadioButtonId % 4; - if (index == 0) { - index = 4; - } - Toast.makeText(getApplicationContext(), "" +index, Toast.LENGTH_SHORT).show(); - dialog.cancel(); - } - }); - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(inflate); - dialog.show(); + fontSize(); break; default: break; } } + private void fontTextSize(int i){ + switch (i){ + case 1: + setting_tv_size.setText("小字号"); + break; + case 2: + setting_tv_size.setText("中字号"); + break; + case 3: + setting_tv_size.setText("大字号"); + break; + case 4: + setting_tv_size.setText("特大字号"); + break; + } + } + + //设置正文字号 + private void fontSize() { + final Dialog dialog = new Dialog(this); + View inflate = LayoutInflater.from(this).inflate(R.layout.dialog_font_size, null); + TextView tv_negative = (TextView) inflate.findViewById(R.id.font_size_negative); + TextView tv_positive = (TextView) inflate.findViewById(R.id.font_size_positive); + final RadioGroup radioGroup = (RadioGroup) inflate.findViewById(R.id.font_size_radiogroup); + ((RadioButton)(radioGroup.getChildAt(checkSizeIndex-1))).setChecked(true); + + tv_negative.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.cancel(); + } + }); + tv_positive.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + checkSizeIndex = radioGroup.getCheckedRadioButtonId() % 4; + + if (checkSizeIndex == 0){ + checkSizeIndex = 4; + } + dialog.cancel(); + saveCurrentSetting(); + fontTextSize(checkSizeIndex); + } + }); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.setContentView(inflate); + dialog.show(); + } // 清除缓存 private void claerCache() { diff --git a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java index d243430368..96b4670e17 100644 --- a/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java +++ b/app/src/main/java/com/gh/gamecenter/ViewImageActivity.java @@ -1,6 +1,7 @@ package com.gh.gamecenter; import android.content.Intent; +import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -22,16 +23,17 @@ import com.gh.common.util.ImageUtils; import com.gh.common.view.Gh_ImageLayout; import com.gh.common.view.Gh_ImageLayout.OnSingleTapListener; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.net.HttpURLConnection; +import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -//import com.facebook.drawee.backends.pipeline.Fresco; -//import com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder; -//import com.facebook.drawee.view.SimpleDraweeView; -//import com.facebook.imagepipeline.request.ImageRequest; -//import com.facebook.imagepipeline.request.ImageRequestBuilder; +import pl.droidsonroids.gif.GifDrawable; +import pl.droidsonroids.gif.GifImageView; + /** * 查看游戏截图页面 @@ -49,7 +51,9 @@ public class ViewImageActivity extends BaseActivity implements private int current; private int width; private String scaleType; - + private ImageView imageView; + private boolean isOrientation; + private boolean isLoading = false; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { @@ -95,6 +99,7 @@ public class ViewImageActivity extends BaseActivity implements if (savedInstanceState != null) { current = savedInstanceState.getInt("currentItem", 0); + isOrientation = savedInstanceState.getBoolean("isOrientation"); } setContentView(R.layout.activity_viewimage); @@ -116,12 +121,25 @@ public class ViewImageActivity extends BaseActivity implements viewimage_vp_show.setAdapter(adapter); viewimage_vp_show.setCurrentItem(current); viewimage_vp_show.addOnPageChangeListener(this); + + if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) + + { + isOrientation = true; // 横屏 + + } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) + + { + isOrientation = false;// 竖屏 + + } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("currentItem", viewimage_vp_show.getCurrentItem()); + outState.putBoolean("isOrientation", isOrientation); } private class ViewImageAdapter extends PagerAdapter implements @@ -129,6 +147,9 @@ public class ViewImageActivity extends BaseActivity implements @Override public int getCount() { + if (urls == null) { + return 0; + } return urls.size(); } @@ -138,30 +159,29 @@ public class ViewImageActivity extends BaseActivity implements Gh_ImageLayout view = (Gh_ImageLayout) View.inflate(container.getContext(), R.layout.viewimage_item, null); view.setOnSingleTapListener(this); -// if (url.contains(".gif")) { -// SimpleDraweeView simpleDraweeView = (SimpleDraweeView) view.findViewById(R.id.test_gif); -// ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)) -// .build(); -// PipelineDraweeControllerBuilder controllerBuilder = Fresco.newDraweeControllerBuilder() -// .setAutoPlayAnimations(true) -// .setTapToRetryEnabled(true) -// .setImageRequest(imageRequest); -// simpleDraweeView.setController(controllerBuilder.build()); -// ViewParent parent = simpleDraweeView.getParent(); -// -// if (parent != null) { -// ViewGroup parent1 = (ViewGroup) parent; -// parent1.removeView(simpleDraweeView); -// } -// container.addView(simpleDraweeView); -// return simpleDraweeView; -// -// } else { - ImageView imageView = (ImageView) view.findViewById(R.id.viewimage_iv_show); + if (url.contains(".gif")) { + GifImageView gifImageView = (GifImageView) view.findViewById(R.id.gifView); + ViewParent parent = gifImageView.getParent(); + if (!isLoading) { + LoadGifData(gifImageView, urls.get(position)); + } + + if (parent != null) { + ViewGroup parent1 = (ViewGroup) parent; + parent1.removeView(gifImageView); + } + container.addView(gifImageView); + return gifImageView; + + } else { + imageView = (ImageView) view.findViewById(R.id.viewimage_iv_show); if (scaleType != null) { ImageUtils.getInstance(getApplicationContext()).display( urls.get(position), imageView, ScaleType.FIT_CENTER); - } else { + } else if (isOrientation && imageView.getDrawable() == null) { + ImageUtils.getInstance(getApplicationContext()).display( + urls.get(position), imageView, 270, isOrientation); + } else if (imageView.getDrawable() == null) { ImageUtils.getInstance(getApplicationContext()).display( urls.get(position), imageView); } @@ -177,10 +197,52 @@ public class ViewImageActivity extends BaseActivity implements view.setTag(position); container.addView(imageView); return imageView; -// } + } } + private void LoadGifData(final GifImageView gifImageView, final String gifUrl) { + isLoading = true; + gifImageView.setImageResource(R.drawable.ocupy); + gifImageView.setScaleType(ScaleType.CENTER); + final GifDrawable[] gifDrawable = {null}; + new Thread(new Runnable() { + @Override + public void run() { + try { + URL url = new URL(gifUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(5 * 1000); + conn.setReadTimeout(5 * 1000); + conn.connect(); + if (conn.getResponseCode() == 200) { + InputStream inputStream = conn.getInputStream(); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + byte[] data = new byte[1024 * 5]; + int count = -1; + while ((count = inputStream.read(data, 0, 1024 * 5)) != -1) { + output.write(data, 0, count); + } + byte[] bytes = output.toByteArray(); + gifDrawable[0] = new GifDrawable(bytes); + handler.post(new Runnable() { + @Override + public void run() { + gifImageView.setImageDrawable(gifDrawable[0]); + gifImageView.setScaleType(ScaleType.FIT_CENTER); + } + }); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + }).start(); + } + @Override public boolean isViewFromObject(View view, Object object) { return view == object; @@ -235,6 +297,10 @@ public class ViewImageActivity extends BaseActivity implements int code = connection.getResponseCode(); if (code == 200) { //图片存在 + if (urls == null) { + return; + } + //urls出现空指针 for (int i = 0, size = urls.size(); i < size; i++) { if (urls.get(i).equals(url)) { urls.set(i, newUrl); @@ -260,5 +326,7 @@ public class ViewImageActivity extends BaseActivity implements viewimage_slide_line = null; rparams = null; urls = null; + imageView = null; + System.gc(); } } diff --git a/app/src/main/res/layout/dialog_font_size.xml b/app/src/main/res/layout/dialog_font_size.xml index 9407b4fff2..8101bd9667 100644 --- a/app/src/main/res/layout/dialog_font_size.xml +++ b/app/src/main/res/layout/dialog_font_size.xml @@ -32,13 +32,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/reuse_radiobutton_item_style" - android:text="特大字号" /> - - + android:text="小字号" /> - android:text="小字号" /> + - - - - - - +