Skip to content

Commit

Permalink
提交测试代码
Browse files Browse the repository at this point in the history
  • Loading branch information
Vicent9920 authored and qingmei2 committed Jul 7, 2020
1 parent ad9bfc6 commit ab1e600
Show file tree
Hide file tree
Showing 12 changed files with 191 additions and 100 deletions.
3 changes: 2 additions & 1 deletion rximagepicker_support/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,11 @@ android {
}

dependencies {
api project(':rximagepicker')

implementation rootProject.ext.dependencies["appcompat"]
implementation rootProject.ext.dependencies["recyclerview"]

implementation project(':rximagepicker')
implementation rootProject.ext.dependencies["kotlin-android"]
implementation rootProject.ext.dependencies["constraint-layout"]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ import com.qingmei2.rximagepicker_extension.R
import com.qingmei2.rximagepicker_extension.entity.IncapableCause
import com.qingmei2.rximagepicker_extension.entity.Item
import com.qingmei2.rximagepicker_extension.entity.SelectionSpec
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.schedulers.Schedulers
import java.io.File

import java.io.FileNotFoundException
Expand Down Expand Up @@ -78,20 +81,25 @@ class PhotoMetadataUtils private constructor() {
} else Point((w * widthScale).toInt(), (h * heightScale).toInt())
}

fun getBitmapSize(path:String, activity: Activity): Point {
val imageSize = getBitmapBound(path)
val w = imageSize.x
val h = imageSize.y
if (h == 0) return Point(MAX_WIDTH, MAX_WIDTH)
val metrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getMetrics(metrics)
val screenWidth = metrics.widthPixels.toFloat()
val screenHeight = metrics.heightPixels.toFloat()
val widthScale = screenWidth / w
val heightScale = screenHeight / h
return if (widthScale > heightScale) {
Point((w * widthScale).toInt(), (h * heightScale).toInt())
} else Point((w * widthScale).toInt(), (h * heightScale).toInt())
fun getBitmapSize(path: String, activity: Activity,callback:((point:Point) -> Unit)){
getBitmapBound(path){imageSize ->
val w = imageSize.x
val h = imageSize.y
if (h == 0) {
callback.invoke(Point(MAX_WIDTH, MAX_WIDTH))
return@getBitmapBound
}
val metrics = DisplayMetrics()
activity.windowManager.defaultDisplay.getMetrics(metrics)
val screenWidth = metrics.widthPixels.toFloat()
val screenHeight = metrics.heightPixels.toFloat()
val widthScale = screenWidth / w
val heightScale = screenHeight / h
callback.invoke(if (widthScale > heightScale) {
Point((w * widthScale).toInt(), (h * heightScale).toInt())
} else Point((w * widthScale).toInt(), (h * heightScale).toInt()))
}

}

private fun getBitmapBound(resolver: ContentResolver, uri: Uri): Point {
Expand All @@ -118,41 +126,49 @@ class PhotoMetadataUtils private constructor() {
}
}

private fun getBitmapBound(path:String): Point {
private fun getBitmapBound(path: String,callback:((point:Point) -> Unit)) {


if(path.startsWith("http")){
var inputStream: InputStream? = null
if (path.startsWith("http")) {
Observable.create<Point> {
var inputStream: InputStream? = null
try {
val connection = URL(path).openConnection() as HttpURLConnection
inputStream = connection.inputStream
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
BitmapFactory.decodeStream(inputStream, null, options)
val width = options.outWidth
val height = options.outHeight
it.onNext(Point(width, height))
return@create
} catch (e: IOException) {
it.onNext(Point(0, 0))
} finally {
try {
inputStream?.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
callback.invoke(it)
}
}else{
try {
val connection = URL(path).openConnection() as HttpURLConnection
inputStream = connection.inputStream
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
BitmapFactory.decodeStream(inputStream, null, options)
BitmapFactory.decodeFile(path, options)
val width = options.outWidth
val height = options.outHeight
return Point(width, height)
} catch ( e:IOException) {
return Point(0, 0)
}finally {
try {
inputStream?.close()
} catch (e: IOException) {
e.printStackTrace()
}
callback.invoke(Point(width, height))
} catch (e: Exception) {
callback.invoke(Point(0, 0))
}
}else{

}
return try {
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
BitmapFactory.decodeFile(path, options)
val width = options.outWidth
val height = options.outHeight
Point(width, height)
} catch (e: Exception) {
Point(0, 0)
}

}

fun getPath(resolver: ContentResolver, uri: Uri?): String? {
Expand Down
6 changes: 2 additions & 4 deletions rximagepicker_support_wechat/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,14 @@ android {
}

dependencies {
implementation project(':rximagepicker')
implementation project(':rximagepicker_support')
// implementation project(':rximagepicker')
api project(':rximagepicker_support')

implementation rootProject.ext.dependencies["appcompat"]
implementation rootProject.ext.dependencies["recyclerview"]
implementation rootProject.ext.dependencies["constraint-layout"]
implementation rootProject.ext.dependencies["kotlin-android"]

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
compileOnly rootProject.ext.dependencies["glide"]
kapt rootProject.ext.dependencies["glide-compiler"]
testImplementation rootProject.ext.dependencies["junit"]
Expand Down
1 change: 1 addition & 0 deletions rximagepicker_support_wechat/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
package="com.qingmei2.rximagepicker_extension_wechat">

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

<application>
<activity android:name=".ui.CustomPreviewActivity"></activity>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@ class WechatGlideEngine : ImageEngine {
.into(imageView)
}

override fun loadImage(context: Context, resizeX: Int, resizeY: Int, imageView: ImageView, path: String) {
Glide.with(context)
.load(path)
.apply(RequestOptions.priorityOf(Priority.HIGH))
.into(imageView)
}

override fun loadGifImage(context: Context, resizeX: Int, resizeY: Int, imageView: ImageView, uri: Uri) {
Glide.with(context)
.asGif()
Expand All @@ -62,6 +69,14 @@ class WechatGlideEngine : ImageEngine {
.into(imageView)
}

override fun loadGifImage(context: Context, resizeX: Int, resizeY: Int, imageView: ImageView, path: String) {
Glide.with(context)
.asGif()
.load(path)
.apply(RequestOptions.priorityOf(Priority.HIGH))
.into(imageView)
}

override fun supportAnimatedGif(): Boolean {
return true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ open class BaseItem() :Parcelable{
/** 文件资源 */
var itemUri: Uri? = null

constructor(type:Int,path:String,uri:Uri? = null): this(){
this.itemType = type
this.itemPath = path
this.itemUri = uri
}
constructor(parcel: Parcel) : this() {
itemType = parcel.readInt()
itemPath = parcel.readString()?:""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.viewpager.widget.ViewPager
import com.qingmei2.rximagepicker_extension.entity.SelectionSpec
import com.qingmei2.rximagepicker_extension.ui.adapter.PreviewPagerAdapter
import com.qingmei2.rximagepicker_extension.utils.Platform
import com.qingmei2.rximagepicker_extension_wechat.R
import com.qingmei2.rximagepicker_extension_wechat.entity.BaseItem
Expand All @@ -18,7 +17,10 @@ const val PREVIEW_POSITION = "extra_position"

class CustomPreviewActivity : AppCompatActivity(), ViewPager.OnPageChangeListener {

protected var mPreviousPos = -1
private var mPreviousPos = -1
private val mAdapter by lazy {
MediaPreviewPagerAdapter<BaseItem>(supportFragmentManager)
}

@SuppressLint("SourceLockedOrientationActivity")
override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -32,14 +34,15 @@ class CustomPreviewActivity : AppCompatActivity(), ViewPager.OnPageChangeListene
if (SelectionSpec.instance.needOrientationRestriction()) {
requestedOrientation = SelectionSpec.instance.orientation
}
pager.addOnPageChangeListener(this)
val adapter = MediaPreviewPagerAdapter<BaseItem>(fm = supportFragmentManager)
val data = intent.getParcelableArrayListExtra<BaseItem>(PREVIEW_DATA)
adapter.addAll(data.toList())
pager.adapter = adapter
mAdapter.addAll(data.toList())
pager.adapter = mAdapter
pager.addOnPageChangeListener(this)
val position = intent.getIntExtra(PREVIEW_POSITION, -1)
if (position != -1) {
pager.currentItem = position
}else{
pager.currentItem = 0
}

}
Expand All @@ -54,10 +57,10 @@ class CustomPreviewActivity : AppCompatActivity(), ViewPager.OnPageChangeListene

@SuppressLint("SetTextI18n")
override fun onPageSelected(position: Int) {
val adapter = pager.adapter as PreviewPagerAdapter
tv_page.text = "${position + 1}/${mAdapter.count}"
if (mPreviousPos != -1 && mPreviousPos != position) {
(adapter.instantiateItem(pager, mPreviousPos) as MediaItemFragment<*>).resetView()
tv_page.text = "${position + 1}/${adapter.count}"
(mAdapter.getItem(mPreviousPos) as MediaItemFragment<BaseItem>).resetView()
// (mAdapter.instantiateItem(pager, mPreviousPos) as MediaItemFragment<BaseItem>).resetView()
}
mPreviousPos = position
}
Expand Down
Loading

0 comments on commit ab1e600

Please sign in to comment.