Top Related Projects
A simple and customizable Android full-screen image viewer with shared image transition support, "pinch to zoom" and "swipe to dismiss" gestures
Implementation of ImageView for Android that supports zooming, by various touch gestures.
Android library (AAR). Highly configurable, easily extendable deep zoom view for displaying huge images without loss of detail. Perfect for photo galleries, maps, building plans etc.
A simple and customizable Android full-screen image viewer 一个简单且可自定义的Android全屏图像浏览器
Quick Overview
Transferee is an Android library for viewing and transferring images. It provides a smooth and customizable image viewing experience, allowing users to zoom, drag, and switch between images with various transition animations.
Pros
- Highly customizable with multiple configuration options
- Supports various image loading libraries (Glide, Universal-Image-Loader, Picasso)
- Smooth transitions and animations for image viewing
- Easy integration with RecyclerView, ListView, and GridView
Cons
- Limited documentation in English
- May require additional setup for different image loading libraries
- Some reported issues with memory management in older versions
- Lack of recent updates (last commit was in 2019)
Code Examples
- Basic usage with RecyclerView:
Transferee transferee = Transferee.getDefault(context);
TransferConfig config = TransferConfig.build()
.setSourceImageList(imageList)
.setIndexIndicator(indexIndicator)
.setProgressIndicator(progressBar)
.setOriginImageList(imageViewList)
.create();
transferee.apply(config).show();
- Customizing transition animation:
TransferConfig config = TransferConfig.build()
.setSourceImageList(imageList)
.setMissPlaceHolder(R.drawable.ic_empty_photo)
.setErrorPlaceHolder(R.drawable.ic_empty_photo)
.setProgressIndicator(progressBar)
.setOriginImageList(imageViewList)
.setEnterAnimation(R.anim.enter_anim) // Custom enter animation
.setExitAnimation(R.anim.exit_anim) // Custom exit animation
.create();
- Using with Glide image loader:
Transferee.getDefault(context)
.apply(TransferConfig.build()
.setSourceImageList(imageList)
.setProgressIndicator(progressBar)
.setOriginImageList(imageViewList)
.setImageLoader(GlideImageLoader.with(context))
.create())
.show();
Getting Started
- Add the JitPack repository to your project's build.gradle file:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- Add the dependency to your app's build.gradle file:
dependencies {
implementation 'com.github.Hitomis:transferee:v1.0.0'
}
- Initialize Transferee in your activity or fragment:
Transferee transferee = Transferee.getDefault(context);
TransferConfig config = TransferConfig.build()
.setSourceImageList(imageList)
.setOriginImageList(imageViewList)
.create();
transferee.apply(config).show();
Competitor Comparisons
A simple and customizable Android full-screen image viewer with shared image transition support, "pinch to zoom" and "swipe to dismiss" gestures
Pros of StfalconImageViewer
- Lightweight and focused on image viewing functionality
- Smooth transitions and animations
- Easy integration with RecyclerView and ViewPager
Cons of StfalconImageViewer
- Limited customization options
- Lacks advanced features like image editing or filtering
- No built-in support for GIFs or video content
Code Comparison
StfalconImageViewer:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
imageView.setOnClickListener {
StfalconImageViewer.Builder<String>(this, images) { view, image ->
Glide.with(this).load(image).into(view)
}.show()
}
}
Transferee:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
transferee = Transferee.getDefault(this);
imageView.setOnClickListener(v -> {
TransferConfig config = TransferConfig.build()
.setSourceImageList(images)
.setThumbnailImageList(thumbnails)
.create();
transferee.apply(config).show();
});
}
Both libraries offer simple integration for image viewing, but Transferee provides more configuration options and supports thumbnails out of the box. StfalconImageViewer has a more concise API and focuses on core image viewing functionality.
Implementation of ImageView for Android that supports zooming, by various touch gestures.
Pros of PhotoView
- More mature and widely adopted project with a larger community
- Supports zooming and panning of images out-of-the-box
- Seamless integration with ViewPager for swiping between images
Cons of PhotoView
- Limited to image viewing functionality only
- Lacks built-in image transfer animations between views
- May require additional libraries for more advanced features
Code Comparison
PhotoView:
PhotoView photoView = findViewById(R.id.photo_view);
photoView.setImageResource(R.drawable.image);
photoView.setScaleType(ImageView.ScaleType.CENTER_CROP);
Transferee:
Transferee transferee = Transferee.getDefault(context);
TransferConfig config = TransferConfig.build()
.setSourceImageList(imageList)
.setIndexIndicator(indexIndicator)
.create();
transferee.apply(config).show();
PhotoView focuses on providing a simple API for image viewing with zoom and pan capabilities, while Transferee offers a more comprehensive solution for image transfers between views with animations. PhotoView is easier to implement for basic image viewing, but Transferee provides more advanced features for complex image interactions in your app.
Android library (AAR). Highly configurable, easily extendable deep zoom view for displaying huge images without loss of detail. Perfect for photo galleries, maps, building plans etc.
Pros of subsampling-scale-image-view
- Specialized for handling large images efficiently through subsampling
- Supports zooming and panning with smooth animations
- Provides detailed documentation and examples for implementation
Cons of subsampling-scale-image-view
- Limited to image viewing functionality only
- Lacks built-in image transfer or gallery features
- May require additional libraries for more complex image handling tasks
Code Comparison
subsampling-scale-image-view:
SubsamplingScaleImageView imageView = new SubsamplingScaleImageView(context);
imageView.setImage(ImageSource.resource(R.drawable.large_image));
imageView.setMaxScale(10f);
transferee:
Transferee transferee = Transferee.getDefault(context);
TransferConfig config = TransferConfig.build()
.setSourceImageList(imageList)
.setIndexIndicator(indexIndicator)
.create();
transferee.apply(config).show();
subsampling-scale-image-view focuses on efficient large image viewing with zooming capabilities, while transferee offers a more comprehensive image transfer and gallery solution. The former provides granular control over image display, while the latter simplifies the process of creating image galleries with transfer animations. Choose based on your specific requirements for image handling and presentation in your Android application.
A simple and customizable Android full-screen image viewer 一个简单且可自定义的Android全屏图像浏览器
Pros of imageviewer
- More comprehensive documentation and examples
- Supports video playback in addition to images
- Offers more customization options for UI elements
Cons of imageviewer
- Larger library size, potentially impacting app performance
- Less frequent updates and maintenance compared to transferee
Code Comparison
transferee:
Transferee.getDefault(context)
.apply(TransferConfig.build()
.setSourceImageList(sourceImageList)
.setThumbnailImageList(thumbnailImageList)
.setMissDrawable(R.drawable.ic_empty_photo)
.setErrorDrawable(R.drawable.ic_empty_photo)
.setOriginImageList(wrapOriginImageViewList())
.setNowThumbnailIndex(position)
.setOffscreenPageLimit(1)
.create())
.show();
imageviewer:
ImageViewer.Builder(this, images)
.setStartPosition(startPosition)
.setBackgroundColorRes(R.color.black)
.setTextColorRes(R.color.white)
.setCustomDraweeHierarchyBuilder(hierarchyBuilder)
.setImageChangeListener(onImageChangeListener)
.setOnDismissListener(onDismissListener)
.show()
Both libraries offer similar functionality for displaying and transitioning between images, but imageviewer provides a more concise API and additional features like video support. transferee focuses on simplicity and efficiency, making it potentially better for lighter applications.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Transferee
transferee å¯ä»¥å¸®å©ä½ å®æä»ç¼©ç¥è§å¾å°åè§å¾çæ ç¼è¿æ¸¡è½¬å, ä¼é çæµè§æ®éå¾çãé¿å¾ãgifå¾ãè§é¢çä¸åæ ¼å¼çå¤åªä½ã
æ¯æçåè½:
- æ¯æè§é¢é¢è§
- æ¯æ Gif å¾é¢è§
- æ¯æ大é¿å¾é¢è§
- æ¯æææ½å ³é
- æ¯æèªå®ä¹é¡µé¢ç´¢å¼æ示å¨
- æ¯æèªå®ä¹èµæºå è½½è¿åº¦æ¡
- æ¯æèªå®ä¹å¾çå è½½å¨[ç®åå·²ç»æ UniversalImageLoader / GlideImageLoader / PicassoImageLoader]
- æ¯æå¾çä¿å
- æ¯æé¢è§å¾ç缩æ¾ï¼æå¨ï¼æ转çæå¿æä½
- 缩ç¥å¾å°å¤§å¾æè 大å¾å°ç¼©ç¥å¾çæ ç¼è¿æ¸¡å¨ç»ï¼æ 缩ç¥å¾ä¿¡æ¯æ¶ï¼èªå¨æ¹åå¨ç»çè¡ä¸ºä¸ºå¹³ç§»è¿æ¸¡->å 载大å¾->伸å±å¾çå¨ç»
- æ¯æå»çå¼ç»å® RecyclerView / ListView / GridView / ImageView
- æ¯æä¸ç»å®ä»»ä½ View, å³å¯å¯å¨ transferee
å¦æä»»ä½é®é¢æ¬¢è¿æ Issues
Preview
Sample
Dependency
step1.
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
step2.
// æ·»å ææ module [å
æ¬ TransfereeãGlideImageLoaderãPicassoImageLoaderãUniversalImageLoader]
implementation 'com.github.Hitomis:transferee:1.6.1'
// åç¬æ·»å æ ¸å¿ module Transferee, ä¹åè³å°è¿éè¦æ·»å 以ä¸ä¸ç§å¾çå è½½å¨ä¸çä¸ç§
implementation 'com.github.Hitomis.transferee:Transferee:1.6.1'
// æ·»å Glide å¾çå è½½å¨
implementation 'com.github.Hitomis.transferee:GlideImageLoader:1.6.1'
// æ·»å Picasso å¾çå è½½å¨
implementation 'com.github.Hitomis.transferee:PicassoImageLoader:1.6.1'
// æ·»å Universal å¾çå è½½å¨
implementation 'com.github.Hitomis.transferee:UniversalImageLoader:1.6.1'
Usage
å¦æé对å个 ImageView 使ç¨ï¼å°é常ç®åï¼
Transferee transfer = Transferee.getDefault(context);
transfer.apply(TransferConfig.build()
.setImageLoader(UniversalImageLoader.with(getApplicationContext()))
.setSourceUrlList(SourceConfig.getMixingSourceGroup())
.create()
).show());
// 离å¼é¡µé¢ä¸è¦å¿è®°è°ç¨
transfer.destroy();
å¦æä½ éè¦æ´å¤çåè½ï¼ä¸é¢æ¯ transferee å®æ´ç使ç¨ç¤ºä¾ï¼
step 1: ä¸ä¸ªé¡µé¢åªå建ä¸ä¸ª transferee ç¤ºä¾ (建议åå¨ onCreate æ¹æ³ä¸)
transferee = Transferee.getDefault(context);
step 2: 为 transferee å建åæ°é ç½®å¨
TransferConfig config = TransferConfig.build()
.setSourceImageList(sourceUrlList) // èµæº url éå, String æ ¼å¼
.setSourceUriList(sourceUriList) // èµæº uri éåï¼ Uri æ ¼å¼
.setMissPlaceHolder(R.mipmap.ic_empty_photo) // èµæºå è½½åçå ä½å¾
.setErrorPlaceHolder(R.mipmap.ic_empty_photo) // èµæºå è½½é误åçå ä½å¾
.setProgressIndicator(new ProgressPieIndicator()) // èµæºå è½½è¿åº¦æ示å¨, å¯ä»¥å®ç° IProgressIndicator æ©å±
.setIndexIndicator(new NumberIndexIndicator()) // èµæºæ°éç´¢å¼æ示å¨ï¼å¯ä»¥å®ç° IIndexIndicator æ©å±
.setImageLoader(GlideImageLoader.with(getApplicationContext())) // å¾çå è½½å¨ï¼å¯ä»¥å®ç° ImageLoader æ©å±
.setBackgroundColor(Color.parseColor("#000000")) // èæ¯è²
.setDuration(300) // å¼å¯ãå
³éãæå¿ææ½å
³éãæ¾ç¤ºãæ©æ£æ¶å¤±çå¨ç»æ¶é¿
.setOffscreenPageLimit(2) // 第ä¸æ¬¡åå§åæè
åæ¢é¡µé¢æ¶é¢å è½½èµæºçæ°éï¼ä¸ justLoadHitImage å±æ§å²çªï¼é»è®¤ä¸º 1
.setCustomView(customView) // èªå®ä¹è§å¾ï¼å°æ¾å¨ transferee çé¢æ¿ä¸
.setNowThumbnailIndex(index) // 缩ç¥å¾å¨å¾ç»ä¸çç´¢å¼
.enableJustLoadHitPage(true) // æ¯å¦åªå è½½å½åæ¾ç¤ºå¨å±å¹ä¸ççèµæºï¼é»è®¤å
³é
.enableDragClose(true) // æ¯å¦å¼å¯ä¸ææå¿å
³éï¼é»è®¤å¼å¯
.enableDragHide(false) // ä¸æææ½å
³éæ¶ï¼æ¯å¦å
éè页é¢ä¸é¤ä¸»è§å¾ä»¥å¤çå
¶ä»è§å¾ï¼é»è®¤å¼å¯
.enableDragPause(false) // ä¸æææ½å
³éæ¶ï¼å¦æå½åæ¯è§é¢ï¼æ¯å¦æåææ¾ï¼é»è®¤å
³é
.enableHideThumb(false) // æ¯å¦å¼å¯å½ transferee æå¼æ¶ï¼éè缩ç¥å¾, é»è®¤å
³é
.enableScrollingWithPageChange(false) // æ¯å¦å¯å¨å表éç页é¢çåæ¢èæ»å¨ä½ çå表ï¼é»è®¤å
³é
.setOnLongClickListener(new Transferee.OnTransfereeLongClickListener() { // é¿æå½å页é¢çå¬å¨
@Override
public void onLongClick(ImageView imageView, String imageUri, int pos) {
saveImageFile(imageUri); // ä½¿ç¨ transferee.getFile(imageUri) è·åç¼åæ件ä¿åï¼è§é¢ä¸æ¯æ
}
})
.bindImageView(imageView, source) // ç»å®ä¸ä¸ª ImageView, ææç»å®æ¹æ³åªè½è°ç¨ä¸ä¸ª
.bindListView(listView, R.id.iv_thumb) // ç»å®ä¸ä¸ª ListViewï¼ ææç»å®æ¹æ³åªè½è°ç¨ä¸ä¸ª
.bindRecyclerView(recyclerView, R.id.iv_thumb) // ç»å®ä¸ä¸ª RecyclerViewï¼ ææç»å®æ¹æ³åªè½è°ç¨ä¸ä¸ª
step 3: æ¾ç¤º transferee
transferee.apply(config).show();
step 4: 离å¼é¡µé¢çæ¶åéè¦éæ¯ transferee ä¸çèµæºï¼é²æ¢å åæ³æ¼ (建议åå¨ onDestroy æ¹æ³ä¸)
transferee.destroy()
Config
å±æ§ | 说æ |
---|---|
sourceUrlList | å°è¦é¢è§çèµæº url éå, String æ ¼å¼ |
sourceUriList | å°è¦é¢è§çèµæº uri éåï¼ Uri æ ¼å¼ |
nowThumbnailIndex | 缩ç¥å¾å¨å¾ç»ä¸çç´¢å¼, å¦æä½ ç»å®äº ListView æè RecyclerViewï¼è¿ä¸ªå±æ§æ¯å¿ é¡»çï¼å¦åå¯ä»¥å¿½ç¥; 亦æå¯ä»¥ä½ä¸ºæå¼ transferee æ¶æå®åå§åæ¾ç¤ºé¡µé¢ç position |
offscreenPageLimit | æ¾ç¤º transferee æ¶åå§åå è½½çèµæºæ°é, é»è®¤ä¸º1, 表示第ä¸æ¬¡å è½½3å¼ (nowThumbnailIndex, nowThumbnailIndex + 1, nowThumbnailIndex - 1); å¼ä¸º 2, 表示å è½½5å¼ ãä¾æ¬¡ç±»æ¨ |
missPlaceHolder | 缺ççå ä½å¾ï¼èµæº id æ ¼å¼ãèµæºæªå è½½å®ææ¶é»è®¤æ¾ç¤ºçå¾ç |
missDrawable | 缺ççå ä½å¾ï¼Drawable æ ¼å¼ãèµæºæªå è½½å®ææ¶é»è®¤æ¾ç¤ºçå¾ç |
errorPlaceHolder | å è½½é误çå ä½å¾ï¼èµæº id æ ¼å¼ãåå¾å è½½é误æ¶æ¾ç¤ºçå¾ç |
errorDrawable | å è½½é误çå ä½å¾ï¼Drawable æ ¼å¼ãåå¾å è½½é误æ¶æ¾ç¤ºçå¾ç |
backgroundColor | transferee æ¾ç¤ºæ¶ï¼transferee èæ¯è² |
duration | å¼å¯ãå ³éãæå¿ææ½å ³éãéæ度å¨ç»æ¾ç¤ºãæ©æ£æ¶å¤±çå¨ç»çæ¶é¿ |
justLoadHitPage | æ¯å¦åªå è½½å½å页é¢ä¸çèµæºãå¦æ设置为 trueï¼é£ä¹åªæå½ transferee åæ¢å°å½å页é¢æ¶ï¼æä¼è§¦åå½å页é¢çå è½½å¨ä½ï¼å¦åæ offscreenPageLimit æ设置çæ°å¼å»åé¢å è½½åå½å页é¢çå è½½å¨ä½ï¼é»è®¤å ³é |
enableDragClose | æ¯å¦æ¯æåä¸ææ½å ³éï¼é»è®¤å¼å¯ |
enableDragHide | ææ½å ³éæ¶æ¯å¦éèé¤ä¸»è§å¾ä»¥å¤çå ¶ä» viewï¼ é»è®¤å¼å¯ |
enableDragPause | ææ½å ³éæ¶æ¯å¦æåå½å页é¢è§é¢ææ¾ï¼ é»è®¤å ³é |
enableHideThumb | æ¯å¦å¼å¯å½ transferee æå¼æ¶ï¼éè缩ç¥å¾ï¼é»è®¤å¼å¯ |
enableScrollingWithPageChange | æ¯å¦å¯å¨å表éç page çåæ¢èæ»å¨ï¼ä» ä» é对ç»å® RecyclerView/GridView/ListView ææ, å¯å¨ä¹åå 为å表ä¼å®æ¶æ»å¨ï¼ç¼©ç¥å¾ view å°ä¸ä¼åºç°ä¸ºç©ºçç°è±¡ï¼ä»èä¿è¯å ³é transferee æ¶ä¸ºè¿æ¸¡å ³éå¨ç»ï¼ é»è®¤å ³é |
progressIndicator | èµæºå è½½è¿åº¦æç¤ºå¨ (é»è®¤å ç½® ProgressPieIndicator å ProgressBarIndicator)ãå¯å®ç° IProgressIndicator æ¥å£å®ä¹èªå·±çèµæºå è½½è¿åº¦æç¤ºå¨ |
indexIndicator | èµæºç´¢å¼æç¤ºå¨ (é»è®¤å ç½® CircleIndexIndicator å NumberIndexIndicator)ãå¯å®ç° IIndexIndicator æ¥å£å®ä¹èªå·±çèµæºç´¢å¼æç¤ºå¨ |
imageLoader | èµæºå è½½å¨ãå¯å®ç° ImageLoader æ¥å£å®ä¹èªå·±çå¾çå è½½å¨ |
imageId | RecyclerView æè ListView ç ItemView ä¸ç ImageView id |
customView | ç¨æ·èªå®ä¹çè§å¾ï¼æ¾ç½®å¨ transferee æ¾ç¤ºåçé¢æ¿ä¹ä¸ |
listView | å¦æä½ æ¯ä½¿ç¨ç ListView æè GridView æ¥æåæ¾ç¤ºå¾çï¼é£ä¹éè¦å°ä½ ç ListView æè GridView ä¼ å ¥ bindListView() æ¹æ³ä¸ |
recyclerView | å¦æä½ ä½¿ç¨ç RecyclerView æ¥æåæ¾ç¤ºå¾çï¼éè¦å° RecyclerView ä¼ å ¥ bindRecyclerView() æ¹æ³ä¸ |
imageView | å¦æåªæ³å¯¹å个 ImageView 使ç¨æ¤åºçåè½ï¼æè çé¢ä¸å个ç ImageView æ¯ç¸åçå°é¢ï¼é£ä¹ä½¿ç¨ bindImageView(...) æè å®çéè½½æ¹æ³å¯ä»¥æ»¡è¶³ä½ çéæ± |
Method
æ¹æ³ | 说æ |
---|---|
getDefault(context) | è·å transferee å®ä¾ |
apply(config) | å°é ç½®åæ°å¯¹è±¡åºç¨å° transferee å®ä¾ä¸ |
show() | æå¼/æ¾ç¤º transferee |
show(listener) | æå¼/æ¾ç¤º transfereeï¼å¹¶çå¬æ¾ç¤º/å ³éç¶æ |
isShown() | transferee æ¯å¦æ¾ç¤º |
dismiss() | å ³é transferee |
clear() | æ¸ é¤å¾çåè§é¢çææç¼åæ件 |
destroy() | éæ¯ transferee 使ç¨å°çèµæºï¼ é²æ¢å åæ³æ¼ |
getImageFile(url) | è·åä¸ url 对åºçç¼åå¾ç |
setOnTransfereeStateChangeListener(listener) | 设置 transferee æ¾ç¤º/å ³éç¶ææ¹åççå¬å¨ |
Update log
-
v1.6.1
- æ°å¢å¾çæ¹åèªå¨æ ¡æ£åè½
- æ°å¢å¾çå¤çï¼ä¼å大å¾çæ¾ç¤º
- ImageLoader æ¥å£ä»£ç éæç®å
- State 代ç éæï¼å»é¤äºæ ç¨ä»£ç ï¼å¹¶å é¤äº RemoteThumbState
- ä¿®å¤é¨åæºåä¸ stage 模å¼å¨ç»å¨é¶æ®µåæ¢çæ¶åæå¨ç bug
- ä¿®å¤é¨åæºåä¸ç¶ææ å导èªæ æ¾ç¤ºé误çé®é¢
- ä¿®å¤æå¼åå ³éçç¶æä¸è½ä¿æä¸è´ç bug
- ä¸æ»æå¿ä¼å
- éç½®ä¸åå½åæ¾ç¤ºåºåçå¾çç¶æ
- ä¼åäºå åå ç¨ï¼å½æµè§å¤å¾ç¸åæ¶ï¼ä¿è¯å å稳å®
- 解å³äºå 为 Config èµæºæªåæ¶è导è´çå åæ³æ¼é®é¢
-
v1.6.0
- æ°å¢è§é¢ææ¾ä»¥åè§é¢é å¥åè½çæ¯æ
- æ°å¢ enableDragPause å±æ§æ§å¶è§é¢ææ½å ³éæ¶æ¯å¦æå
- æ°å¢ enableHideThumb å±æ§æ§å¶ç¼©ç¥å¾æ¯å¦æ¶å¤±
- æ°å¢ enableScrollingWithPageChange å±æ§æ§å¶ç¨æ·çå表æ¯å¦è·é transferee 页é¢åæ¢èæ»å¨
- ä¼åä¸æå ³éæå¿ç交äº
- ä¼å页é¢åæ¢æ¶ï¼æ§è½è¾å·®ææºä¸å¯è½åºç°ä¸æ¬¡éªå±çé®é¢
- ä¼åå¨æ²¡æç½ç»çæ åµä¸ï¼transferee å¯å¨æè å ³éæ¶ä¸äºè¾¹çæ§è´¨çé®é¢
- ä¼åå¾ç没æå è½½åºæ¥çæ¶åï¼æå¿å ³éçæ¶åå¨ç»ä¸æ£å¸¸çé®é¢
- ä¿®å¤å 为æ æ³è·å originImage 导è´çå ä½å¾ä¸ºç©ºç bug
- ä¿®å¤å 载失败çæ¶åï¼æ æ³éè¿ç¹å»å±å¹å ³éç bug
- ä¿®å¤å ³éæ¶ï¼èæ¯è²æ¸åç®æ³é误ç bug
- ä¿®å¤ä½¿ç¨ä¿®å¤ bindImageView api åºç°æ°ç»ä¸æ è¶çç bug
- ä¿®å¤å½å¨ç»æ¶é¿è¾é¿æ¶ï¼åºç°ç没ææå¼å®æä¹åï¼å°±è½ä½¿ç¨ç©çæé®å ³éç bug
- ä¿®å¤é¨åæºåä¸åªå 载缩ç¥å¾ï¼æ²¡æå è½½é«æ¸ å¾ï¼æå¼åï¼å ä½å¾å¤§å°ä¸ä¸æ ·ç bug
- ä¿®å¤äºå ¨é¢å±ãåæµ·å± dialog å ¨å±éé é误ç bug
- ä¿®å¤é¨åæºåä¸ enableDragHide åè½ä¸æ£å¸¸ç bug
- ä¿®å¤å¼±ç½æè æ ç½çæ åµä¸ï¼è¢«éèç页é¢å ä½å¾ä¸æ¾ç¤ºç bug
- ä¿®å¤äºä¸äºä»£ç é»è¾é误
-
v1.5.2
- ä¿®æ¹ transferee å®¹å¨ dialog åºå®ä¸ºå ¨å±æ ·å¼ãæ´å¥½çé åå½åå¯å®å¶åçç¶ææ ã
- transferee ç»å®ç ListView æè RecyclerView æ¯ææ·»å header æè footer
- RecyclerViewActivity æ°å¢çº¿æ§æååä¹å®«æ ¼æååæ¢ï¼æ¼ç¤ºå¨ä¸åçåè¡¨ä¸ transferee 使ç¨æ¹å¼
-
v1.5.1
- ä¿®æ¹å¨æ ç½ç»çæ¶åï¼ä½¿ç¨ GlideImageLoader å è½½å¾çéªéåè¡ä¸ºéä¹±çé®é¢
- æ·»å enableDragHide å±æ§ï¼æ§å¶å¨ææ½å ³éçæ¶åï¼æ¯å¦ç«å³éèå ¶ä» view
- ç±äºåå²åå ï¼ä¸åå ¼å®¹4.4以ä¸çå ¨å±æ¨¡å¼ãåæ¶ä¿®å¤äº StatusBar æå¨çé®é¢
- æå± Uri æ ¼å¼çå¾çæ°æ®æºæ¥å£
- æ·»å ä¸ç»å® view ä¹è½ä½¿ç¨ Transferee çç¶æ模å
- åæ¥æ´æ° demo
-
v1.5.0
- æ°å¢ææ½å ³éåè½
- æ°å¢ gif å¾çå大é¿å¾æ¾ç¤º
- æ·»å å¾çæºæ件ä¿ååè½
- æ·»å GlideImageLoader ä½ä¸ºå¾çå è½½çæ©å±é¡¹
- æ·»å PicassoLoader ä½ä¸ºå è½½å¾ççæ©å±é¡¹
- æ°å¢èªå®ä¹æ¾ç¤ºé¢æ¿ ui çæ¥å£ï¼å¯ä»¥è®©ç¨æ·èªå·±æ·»å view å°æ¾ç¤ºé¢æ¿ä¸
- å ¼å®¹ AndroidX
- ä¿®å¤é¿å¾æ¾ç¤ºæ¨¡ç³çé®é¢
- ä¿®å¤å 为ç½ç»é误æè å¾çå°åé®é¢è导è´å¾çå 载失败åï¼è¿åº¦æ¡æ²¡æå ³éçbug
- å ¼å®¹å¾çæ¯ImageViewå¤çæ åµ ãfix bug#70ã
- åè°ç¨æ¹å¼ï¼ä¸éè¦å ³æ³¨ç¼©ç¥å¾çæ¯å¦å è½½å®æ
- ä¿®å¤ç¼åæ¸ é¤çcrash
-
v1.3.0
- æ¯æ transferee ç»å®å个 ImageView ç´æ¥ä½¿ç¨
- æ¯æ transferee ç»å®å个 ImageView åå¤æ ·åå±ç¤ºå¾çï¼å ¼å®¹æ缩ç¥å¾ï¼æ 缩ç¥å¾ï¼æè å®é å¾çæ°éè¿å¤§äºè¿éçä¸ä¸ª ImageView æ°éï¼ä¾å¦ç¹å»ç¸åå°é¢å¾çï¼å¯ä»¥æ¥çç¸åä¸å ¶ä»çå¾çççåè½
- ä¼å api 使ç¨æ¹å¼ï¼æç®å¯ä»¥åªéè¦ç»å®æ§ä»¶ï¼ä¼ å ¥å¾çå°ååå°±è½ä½¿ç¨
- ä¼åç¨æ·ä½éªï¼ä¸åéè¦å ³æ³¨ç¼©ç¥å¾æ¯å¦å è½½å®æï¼ä»»ä½æ¶å»é½å¯ä»¥ç«å³æå¼ transferee
- ä¿®å¤å åæ³æ¼é®é¢
- ç®å demo 代ç
-
v1.2.0
- é对ä¹åçæ¬ç使ç¨å¤æèèï¼æ·»å äºç´æ¥ç»å® ListViewï¼GridViewï¼RecyclerView å³å¯ä½¿ç¨ï¼ä¸åéè¦äººèä¼ å ¥ originImageList
- ä¿®å¤æè¶ åºå±å¹å¤å¾çæ å¢ä¸ transferee å´©æºçæ æ¯
- ä¿®å¤ Issues ä¸åä½åå¦åé¦çbug
-
v1.1.0
- ä¿®å¤ transferee åä¾ä¸ºæ®éå®ä¾ï¼è§£å³å¤ä¸ªçé¢å ¬ç¨ transferee åä¾æ¶çå¼å¸¸é®é¢
-
v1.0.0
- å°é¡¹ç®æç®¡å° jitpackãç®åå¯ä»¥ä½¿ç¨æ·»å dependencies çæ¹å¼ï¼å¯¼å ¥ transferee ç»ä»¶
-
v0.5
- ä¼åæå¼æè å ³é transferee æ¶èæ¯è²æ¾ç¤ºææï¼ä»ç´æ¥æ¾ç¤ºèæ¯è²ä¼å为æ¸åæ¾ç¤ºã
- åºäº #26 æ·»å transferee 使ç¨æ¬å°å¾çåºæ¯ä¸ç Demo
- 为 transferee ç»ä»¶æ·»å èæ¯è²èªå®ä¹åè½
- 为 transferee ç»ä»¶æ·»å é¿æçå¬å¨ï¼å¹¶æ·»å äºé¿æä¿åå¾çå°ç¸åç示ä¾ä»£ç
- æ´æ°äºé¨å示ä¾ä»£ç ä¸å¤±æçå¾çå°å
Licence
Copyright 2017 Vans, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Top Related Projects
A simple and customizable Android full-screen image viewer with shared image transition support, "pinch to zoom" and "swipe to dismiss" gestures
Implementation of ImageView for Android that supports zooming, by various touch gestures.
Android library (AAR). Highly configurable, easily extendable deep zoom view for displaying huge images without loss of detail. Perfect for photo galleries, maps, building plans etc.
A simple and customizable Android full-screen image viewer 一个简单且可自定义的Android全屏图像浏览器
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot