Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Rsshub | 26,103 | 3 | 7 hours ago | 2,531 | July 31, 2023 | 270 | mit | JavaScript | ||
🍰 Everything is RSSible | ||||||||||
Pythonspidernotes | 6,148 | 2 years ago | 9 | Python | ||||||
Python入门网络爬虫之精华版 | ||||||||||
Weapp Wechat Zhihu | 1,747 | a year ago | 13 | JavaScript | ||||||
微信中的知乎--微信小程序 demo // Zhihu in Wechat | ||||||||||
Vue Wechat | 1,596 | 6 years ago | 11 | Vue | ||||||
用Vue.js开发微信app | ||||||||||
Rximagepicker | 1,143 | a year ago | 19 | mit | Kotlin | |||||
:rocket:RxJava2 and RxJava3 external support. Android flexible picture selector, provides the support for theme of Zhihu and WeChat (灵活的Android图片选择器,提供了知乎和微信主题的支持). | ||||||||||
Wechat Miniprogram Examples | 640 | 4 years ago | mit | JavaScript | ||||||
WeChat mini program examples. 微信小程序示例 | ||||||||||
Weapp Zhihulive | 328 | 6 years ago | 1 | apache-2.0 | Python | |||||
知乎Live微信小程序 & asyncio爬虫 | ||||||||||
Open The F King Url Right Now | 291 | a month ago | gpl-3.0 | JavaScript | ||||||
自动跳转某些网站不希望用户直达的外链 | ||||||||||
Free Tensorflow | 82 | 6 years ago | apache-2.0 | |||||||
Tensorflow 免费中文视频教程,开源代码,免费书籍. | ||||||||||
Wechat Zhihu Csdnblog Code | 50 | 3 years ago | Jupyter Notebook | |||||||
WeChat Official Accounts, zhihu and CSDN'blog code |
Support for RxJava2
. Flexible picture selector of Android, provides the support for theme of Zhihu and WeChat.
Zhihu
: Famous Online Q&A Community APP in China.
Purpose of RxImagePicker: Let developers realize the demand of selecting picture in the development of Android in a simple and flexible way.
RxImagePicker is a reactive picture selector for Android, which converts your selection requirements of picture into an interface for configuration and displays any UI theme in Activity
or Fragment
.
Observable/Flowable/Single/Maybe
)The following code will show you how to use photo album or camera at the Android system-level :
// The most basic architecture, only provides the default
// picture selector and photographing function of system.
implementation 'com.github.qingmei2:rximagepicker:${last_version}'
// Provide the basic components of custom UI picture selector
// and this dependency needs to be added to the requirements of the custom UI
implementation 'com.github.qingmei2:rximagepicker_support:${last_version}'
// If you need additional UI support, choose to rely on the corresponding UI extension library
// Zhihu picture selector
implementation 'com.github.qingmei2:rximagepicker_support_zhihu:${last_version}'
// WeChat picture selector
implementation 'com.github.qingmei2:rximagepicker_support_wechat:${last_version}'
If your project not migrate to
androidx
, please use version2.2.0
.
Declare an interface and carry out the following configuration:
public interface MyImagePicker {
@Gallery // open gallery
Observable<Result> openGallery(Context context);
@Camera // take photos
Observable<Result> openCamera(Context context);
}
Instantiate the interface in your Activity
or Fragment
to open the default album and camera screen of system:
RxImagePicker
.create(MyImagePicker.class)
.openGallery(this)
.subscribe(new Consumer<Result>() {
@Override
public void accept(Result result) throws Exception {
// do something, ex:
Uri uri = result.getUri();
GlideApp.with(this)
.load(uri)
.into(ivPickedImage);
}
});
// Zhihu picture selector
implementation 'com.github.qingmei2:rximagepicker_support_zhihu:${last_version}'
Declare an interface and carry out the following configuration:
interface ZhihuImagePicker {
// normal style
@Gallery(componentClazz = ZhihuImagePickerActivity::class,
openAsFragment = false)
fun openGalleryAsNormal(context: Context,
config: ICustomPickerConfiguration): Observable<Result>
// dracula style
@Gallery(componentClazz = ZhihuImagePickerActivity::class,
openAsFragment = false)
fun openGalleryAsDracula(context: Context,
config: ICustomPickerConfiguration): Observable<Result>
// take photo
@Camera
fun openCamera(context: Context): Observable<Result>
}
val rxImagePicker: ZhihuImagePicker = RxImagePicker
.create(ZhihuImagePicker::class.java)
rxImagePicker.openGalleryAsNormal(this,
ZhihuConfigurationBuilder(MimeType.ofImage(), false)
.maxSelectable(9)
.countable(true)
.spanCount(4)
.theme(R.style.Zhihu_Normal)
.build())
.subscribe {
Glide.with(this@ZhihuActivity)
.load(it.uri)
.into(imageView)
}
see sample for more informations.
RxImagePicker provides two action annovation, respectively @Gallery
and @Camera
.
@Camera
will declare the way annovated by the annovation Open the camera to take a photo.
Please note, each method of the interface must add an action annotation to declare the corresponding action. If the method is not configured with @Gallery
or @Camera
, RxImagePicker will throw an Exception
at runtime.
@Gallery
will open the photo album to choose picture.
It has three parameters:
componentClazzKClass<*>
The class object of UI component, opens SystemGalleryPickerView::class
the system Gallery by default.
openAsFragmentBoolean
Whether UI component is displayed as Fragment
in some parts of Activity
is true by default.
containerViewId: Int
If UI needs to be displayed as Fragment
in ViewGroup, the id corresponding to the ViewGroup needs to be assigned to it.
At present UI component only supports two kinds: FragmentActivity
or Fragment
(support-v4).
Taking turning on the system camera for example, its principle is to instantiate an invisible Fragment
in the current Activity
, and Fragment
opens the system photo album through Intent
and processes the returned data through the method of onActivityResult()
. The code is as the following:
interface SystemImagePicker {
@Gallery // by default,componentClazzKClass = SystemGalleryPickerView::classopenAsFragmentBoolean=true
fun openGallery(context: Context): Observable<Result>
}
When need to custom UI, taking Zhihu theme as an example, we will configure ZhihuImagePickerActivity::class
to componentClazz
and set the value of openAsFragment
to false
:
interface ZhihuImagePicker {
@Gallery(componentClazz = ZhihuImagePickerActivity::class,
openAsFragment = false)
fun openGalleryAsNormal(context: Context,
config: ICustomPickerConfiguration): Observable<Result>
@Gallery(componentClazz = ZhihuImagePickerActivity::class,
openAsFragment = false)
fun openGalleryAsDracula(context: Context,
config: ICustomPickerConfiguration): Observable<Result>
@Camera
fun openCamera(context: Context): Observable<Result>
}
For more information, please refer to the ZhihuActivity in sample.
At the same time, when UI needs to be displayed as Fragment
, RxImagePicker
needs to be informed of the id
of the ViewGroup
control so that RxImagePicker
can be correctly displayed in the corresponding ViewGroup
.
@Camera
will declare the way annotated by the annotation open the camera to take photo.
Please note, @Camera
only provides the function of calling the system camera to take a photo at present. Although this annotation provides the same API as @Gallery
, there is no sense to configure them at present.
ICustomPickerView
is an underneath interface, it is used for:
interface ICustomPickerView {
fun display(fragmentActivity: FragmentActivity,
@IdRes viewContainer: Int,
configuration: ICustomPickerConfiguration?)
fun pickImage(): Observable<Result>
}
It has several classic implementation classes, for example, ImagePickerDisplayer when open the corresponding activity through configuration;
Each interface method of RxImagePicker must be configured with a Context
as parameters. If the method does not have any parameters, it will throw out NullPointerException
:
${method.name} requires just one instance of type: Context, but none.
This is understandable. Starting the UI component of a picture selector must depend on the instance of Context
.
Note, This Context
must be a FragmentActivity
, not Application
or others, or else throw out the abnormity of IllegalArgumentException
!
ICustomPickerConfiguration
interface, similar to a tag. RxImagePicker will treat it as the configuration class.
As for opening the system photo album or system camera, it makes no sense to configure, but it must be configured for custom UI ( such as WeChat
theme and Zhihu
theme ).
The basic components of RxImagePicker do not provide the implementation class, please refer to SelectionSpec if any questions.
Though RxImagePicker provides the UI style of WeChat
picture selector and Zhihu
picture selector, two sets of models are still not enough to cover more and more sophisticated UI demands of APP.
RxImagePicker provides enough degree of freedom interface to provide private customized UI for developers. Whether a new Activity
is created or displayed in a ViewGroup
container at present, it is enough.
The above WeChat theme and Zhihu theme are based on its to implement. Please refer to the source code for detailed implementation.
The RxImagePickerMIT License
Copyright (c) 2018 qingmei2
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.