Skip to content

Commit

Permalink
更新到1.3版本,升级Glide版本,优化插入网络图片
Browse files Browse the repository at this point in the history
  • Loading branch information
sendtion committed May 5, 2018
1 parent bb7ee81 commit c0753db
Show file tree
Hide file tree
Showing 17 changed files with 277 additions and 108 deletions.
22 changes: 0 additions & 22 deletions .idea/compiler.xml

This file was deleted.

3 changes: 0 additions & 3 deletions .idea/copyright/profiles_settings.xml

This file was deleted.

9 changes: 5 additions & 4 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 17 additions & 7 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,36 +1,46 @@
apply plugin: 'com.android.application'

android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.sendtion.xrichtext"
minSdkVersion 14
targetSdkVersion 22
versionCode 2
versionName "1.1"
versionCode 5
versionName "1.3"
}

buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

lintOptions {
disable 'GoogleAppIndexingWarning'
baseline file("lint-baseline.xml")
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
testImplementation 'junit:junit:4.12'

implementation project(':xrichtext')
//implementation 'com.github.sendtion:XRichText:1.2'

//implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:design:26.1.0'
implementation 'com.android.support:cardview-v7:26.1.0'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:cardview-v7:27.1.1'

//图片选择器 https://github.com/donglua/PhotoPicker
implementation 'me.iwf.photopicker:PhotoPicker:0.8.4@aar'
//implementation 'me.iwf.photopicker:PhotoPicker:0.8.4@aar'
//知乎图片选择 https://github.com/zhihu/Matisse
implementation 'com.zhihu.android:matisse:0.4.3'

implementation 'io.reactivex:rxjava:1.3.0'
implementation 'io.reactivex:rxandroid:1.2.1'

}
25 changes: 19 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package="com.sendtion.xrichtextdemo">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
Expand All @@ -27,12 +28,24 @@
android:name=".ui.NoteActivity"
android:label="@string/title_activity_note"/>

<activity
android:name="me.iwf.photopicker.PhotoPickerActivity"
android:screenOrientation="portrait" />
<activity
android:name="me.iwf.photopicker.PhotoPagerActivity"
android:screenOrientation="portrait" />
<!--图片选择器-->
<!--<activity-->
<!--android:name="me.iwf.photopicker.PhotoPickerActivity"-->
<!--android:screenOrientation="portrait" />-->
<!--<activity-->
<!--android:name="me.iwf.photopicker.PhotoPagerActivity"-->
<!--android:screenOrientation="portrait" />-->

<!--知乎图片选择器,适配7.0系统-->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.sendtion.xrichtextdemo.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
</application>

</manifest>
59 changes: 39 additions & 20 deletions app/src/main/java/com/sendtion/xrichtextdemo/ui/NewActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import android.app.ProgressDialog;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
Expand All @@ -22,14 +24,16 @@
import com.sendtion.xrichtextdemo.db.NoteDao;
import com.sendtion.xrichtextdemo.util.CommonUtil;
import com.sendtion.xrichtextdemo.util.ImageUtils;
import com.sendtion.xrichtextdemo.util.MyGlideEngine;
import com.sendtion.xrichtextdemo.util.SDCardUtil;
import com.sendtion.xrichtextdemo.util.StringUtils;
import com.zhihu.matisse.Matisse;
import com.zhihu.matisse.MimeType;
import com.zhihu.matisse.internal.entity.CaptureStrategy;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import me.iwf.photopicker.PhotoPicker;
import rx.Observable;
import rx.Observer;
import rx.Subscriber;
Expand All @@ -43,6 +47,8 @@
public class NewActivity extends BaseActivity implements RichTextEditor.OnDeleteImageListener {
private static final String TAG = "NewActivity";

private static final int REQUEST_CODE_CHOOSE = 23;//定义请求码常量

private EditText et_new_title;
private RichTextEditor et_new_content;
private TextView tv_new_time;
Expand Down Expand Up @@ -318,13 +324,20 @@ private void callGallery(){
// intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");// 相片类型
// startActivityForResult(intent, 1);

//调用第三方图库选择
PhotoPicker.builder()
.setPhotoCount(5)//可选择图片数量
.setShowCamera(true)//是否显示拍照按钮
.setShowGif(true)//是否显示动态图
.setPreviewEnabled(true)//是否可以预览
.start(this, PhotoPicker.REQUEST_CODE);
Matisse.from(this)
.choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))//照片视频全部显示MimeType.allOf()
.countable(true)//true:选中后显示数字;false:选中后显示对号
.maxSelectable(3)//最大选择数量为9
//.addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
.gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))//图片显示表格的大小
.restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)//图像选择和预览活动所需的方向
.thumbnailScale(0.85f)//缩放比例
.theme(R.style.Matisse_Zhihu)//主题 暗色主题 R.style.Matisse_Dracula
.imageEngine(new MyGlideEngine())//图片加载方式,Glide4需要自定义实现
.capture(true) //是否提供拍照功能,兼容7.0系统需要下面的配置
//参数1 true表示拍照存储在共有目录,false表示存储在私有目录;参数2与 AndroidManifest中authorities值相同,用于适配7.0系统 必须设置
.captureStrategy(new CaptureStrategy(true,"com.sendtion.xrichtextdemo.fileprovider"))//存储到哪里
.forResult(REQUEST_CODE_CHOOSE);//请求码
}

@Override
Expand All @@ -334,7 +347,7 @@ protected void onActivityResult(int requestCode, int resultCode, final Intent da
if (data != null) {
if (requestCode == 1){
//处理调用系统图库
} else if (requestCode == PhotoPicker.REQUEST_CODE){
} else if (requestCode == REQUEST_CODE_CHOOSE){
//异步方式插入图片
insertImagesSync(data);
}
Expand All @@ -354,18 +367,21 @@ private void insertImagesSync(final Intent data){
public void call(Subscriber<? super String> subscriber) {
try{
et_new_content.measure(0, 0);
int width = CommonUtil.getScreenWidth(NewActivity.this);
int height = CommonUtil.getScreenHeight(NewActivity.this);
ArrayList<String> photos = data.getStringArrayListExtra(PhotoPicker.KEY_SELECTED_PHOTOS);
List<Uri> mSelected = Matisse.obtainResult(data);
//可以同时插入多张图片
for (String imagePath : photos) {
//Log.i("NewActivity", "###path=" + imagePath);
Bitmap bitmap = ImageUtils.getSmallBitmap(imagePath, width, height);//压缩图片
for (Uri imageUri : mSelected) {
String imagePath = SDCardUtil.getFilePathFromUri(NewActivity.this, imageUri);
//Log.e(TAG, "###path=" + imagePath);
Bitmap bitmap = ImageUtils.getSmallBitmap(imagePath, screenWidth, screenHeight);//压缩图片
//bitmap = BitmapFactory.decodeFile(imagePath);
imagePath = SDCardUtil.saveToSdCard(bitmap);
//Log.i("NewActivity", "###imagePath="+imagePath);
//Log.e(TAG, "###imagePath="+imagePath);
subscriber.onNext(imagePath);
}

//测试插入网络图片 http://p695w3yko.bkt.clouddn.com/18-5-5/44849367.jpg
subscriber.onNext("http://p695w3yko.bkt.clouddn.com/18-5-5/30271511.jpg");

subscriber.onCompleted();
}catch (Exception e){
e.printStackTrace();
Expand All @@ -379,14 +395,17 @@ public void call(Subscriber<? super String> subscriber) {
.subscribe(new Observer<String>() {
@Override
public void onCompleted() {
insertDialog.dismiss();
et_new_content.addEditTextAtIndex(et_new_content.getLastIndex(), " ");
if (insertDialog != null && insertDialog.isShowing()) {
insertDialog.dismiss();
}
showToast("图片插入成功");
}

@Override
public void onError(Throwable e) {
insertDialog.dismiss();
if (insertDialog != null && insertDialog.isShowing()) {
insertDialog.dismiss();
}
showToast("图片插入失败:"+e.getMessage());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.sendtion.xrichtextdemo.util;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.widget.ImageView;

import com.bumptech.glide.Priority;
import com.sendtion.xrichtext.GlideApp;
import com.zhihu.matisse.engine.ImageEngine;

/**
* 自定义Glide加载引擎,用于知乎图片选择器
*/
public class MyGlideEngine implements ImageEngine {
@Override
public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
GlideApp.with(context)
.asBitmap() // some .jpeg files are actually gif
.load(uri)
.placeholder(placeholder)
.override(resize, resize)
.centerCrop()
.into(imageView);
}

@Override
public void loadAnimatedGifThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
GlideApp.with(context)
.asBitmap()
.load(uri)
.placeholder(placeholder)
.override(resize, resize)
.centerCrop()
.into(imageView);
}

@Override
public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
GlideApp.with(context)
.load(uri)
.override(resizeX, resizeY)
.priority(Priority.HIGH)
.into(imageView);
}

@Override
public void loadAnimatedGifImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
GlideApp.with(context)
.asGif()
.load(uri)
.override(resizeX, resizeY)
.priority(Priority.HIGH)
.into(imageView);
}

@Override
public boolean supportAnimatedGif() {
return true;
}
}
Loading

0 comments on commit c0753db

Please sign in to comment.