├── .gitignore ├── LICENSE.md ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── xyz │ │ └── zpayh │ │ └── original │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── backlit.jpg │ │ ├── beauty.jpg │ │ ├── girl │ │ │ └── girl-2161202.jpg │ │ ├── night-view.jpg │ │ ├── woman-2212358.jpg │ │ └── woman.jpg │ ├── java │ │ └── xyz │ │ │ └── zpayh │ │ │ └── original │ │ │ ├── BasicActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── MainApplication.java │ │ │ ├── RecyclerViewActivity.java │ │ │ ├── UriConstants.java │ │ │ ├── ViewPagerActivity.java │ │ │ └── adapter │ │ │ └── HDImageViewAdapter.java │ └── res │ │ ├── drawable │ │ ├── fix.jpg │ │ ├── girl1.jpg │ │ ├── girl2.jpg │ │ ├── logo.png │ │ └── panorama.jpg │ │ ├── layout │ │ ├── act_basic.xml │ │ ├── act_recycler_view.xml │ │ ├── act_view_pager.xml │ │ ├── activity_main.xml │ │ ├── content_basic.xml │ │ ├── content_recycler_view.xml │ │ ├── content_view_pager.xml │ │ ├── item_activity.xml │ │ ├── item_hdimage_list.xml │ │ └── item_hdimage_pager.xml │ │ ├── mipmap-hdpi │ │ ├── big.jpg │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── arrays.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── xyz │ └── zpayh │ └── original │ └── ExampleUnitTest.java ├── build.gradle ├── crop ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── xyz │ │ └── zpayh │ │ └── crop │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── xyz │ │ │ └── zpayh │ │ │ └── crop │ │ │ └── CropHDImageView.java │ └── res │ │ └── values │ │ ├── color.xml │ │ └── strings.xml │ └── test │ └── java │ └── xyz │ └── zpayh │ └── crop │ └── ExampleUnitTest.java ├── cropsample ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── xyz │ │ └── zpayh │ │ └── cropsample │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── girl.jpg │ ├── java │ │ └── xyz │ │ │ └── zpayh │ │ │ └── cropsample │ │ │ └── MainActivity.java │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ └── content_main.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── xyz │ └── zpayh │ └── cropsample │ └── ExampleUnitTest.java ├── gif └── demo.gif ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── library ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── xyz │ │ └── zpayh │ │ └── hdimage │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── xyz │ │ │ └── zpayh │ │ │ └── hdimage │ │ │ ├── AnimationBuilder.java │ │ │ ├── HDImageView.java │ │ │ ├── ImageSizeOptions.java │ │ │ ├── ImageSource.java │ │ │ ├── ImageSourceBuilder.java │ │ │ ├── ImageSourceLoadListener.java │ │ │ ├── ImageViewOptions.java │ │ │ ├── Mapping.java │ │ │ ├── OnBitmapLoadListener.java │ │ │ ├── ScaleAndTranslate.java │ │ │ ├── SimpleAnimatorListener.java │ │ │ ├── SimpleValueAnimator.java │ │ │ ├── animation │ │ │ ├── AnimatorListener.java │ │ │ ├── AnimatorUpdateListener.java │ │ │ └── ValueAnimator.java │ │ │ ├── core │ │ │ ├── HDImageViewConfig.java │ │ │ └── HDImageViewFactory.java │ │ │ ├── datasource │ │ │ ├── BitmapDataSource.java │ │ │ ├── DefaultBitmapDataSource.java │ │ │ ├── Interceptor.java │ │ │ ├── OrientationInterceptor.java │ │ │ ├── RealInterceptorChain.java │ │ │ ├── RealOrientationInterceptor.java │ │ │ └── interceptor │ │ │ │ ├── AssetInterceptor.java │ │ │ │ ├── AssetOrientationInterceptor.java │ │ │ │ ├── ContentInterceptor.java │ │ │ │ ├── ContentOrientationInterceptor.java │ │ │ │ ├── FileInterceptor.java │ │ │ │ ├── FileOrientationInterceptor.java │ │ │ │ ├── Interceptors.java │ │ │ │ ├── NetworkInterceptor.java │ │ │ │ ├── NetworkOrientationInterceptor.java │ │ │ │ └── ResourceInterceptor.java │ │ │ ├── state │ │ │ ├── Orientation.java │ │ │ ├── ScaleType.java │ │ │ ├── Translation.java │ │ │ └── Zoom.java │ │ │ └── util │ │ │ ├── DiskLruCache.java │ │ │ ├── ImageCache.java │ │ │ ├── Preconditions.java │ │ │ ├── UriUtil.java │ │ │ └── Utils.java │ └── res │ │ └── values │ │ ├── attr.xml │ │ └── strings.xml │ └── test │ └── java │ └── xyz │ └── zpayh │ └── hdimage │ └── ExampleUnitTest.java ├── settings.gradle ├── support-fresco ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── xyz │ └── zpayh │ └── hdimage │ └── datasource │ └── interceptor │ └── FrescoInterceptor.java └── support-glide ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src └── main ├── AndroidManifest.xml └── java └── xyz └── zpayh └── hdimage └── datasource └── interceptor └── GlideInterceptor.java /.gitignore: -------------------------------------------------------------------------------- 1 | # built application files 2 | *.ap_ 3 | 4 | # files for the dex VM 5 | *.dex 6 | 7 | # Java class files 8 | *.class 9 | 10 | # generated files 11 | bin/ 12 | gen/ 13 | 14 | # Local configuration file (sdk path, etc) 15 | local.properties 16 | 17 | # Proguard folder generated by Eclipse 18 | proguard/ 19 | 20 | # Ignore gradle files 21 | .gradle/ 22 | build/ 23 | 24 | # Eclipse project files 25 | .classpath 26 | .project 27 | .settings/ 28 | 29 | # Intellij project files 30 | *.iml 31 | *.ipr 32 | *.iws 33 | .idea/ 34 | 35 | # Mac system files 36 | .DS_Store 37 | 38 | *.keystore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HDImageView 2 | [![License](https://img.shields.io/badge/license-Apache%202-green.svg)](https://www.apache.org/licenses/LICENSE-2.0) 3 | [ ![Download](https://api.bintray.com/packages/sherlock/maven/hdimageview/images/download.svg) ](https://bintray.com/sherlock/maven/hdimageview/_latestVersion) 4 | 5 | HD image view supporting pan and zoom, with very little memory usage and full featured image loading choices. 6 | 7 | Requires Android SDK version 14 or higher. 8 | ## Demo 9 | ![Demo](https://raw.githubusercontent.com/EvilBT/HDImageView/master/gif/demo.gif) 10 | ## Getting started 11 | **Step 1.** Add the dependency 12 | ``` 13 | dependencies { 14 | implementation 'xyz.zpayh:hdimageview:3.0.1' 15 | 16 | // 以下可以选用 17 | 18 | // if you use Glide 4.x , you can compile :(如果你正在使用Glide 4.0或以上的版本,你可以添加下面的库) 19 | implementation 'xyz.zpayh:hdimageview-glide:3.0.0' 20 | implementation 'com.github.bumptech.glide:glide:4.9.0' 21 | 22 | // if you use Fresco 1.4.x , you can compile :(如果你正在使用Fresco 2.0.0或以上的版本,你可以添加下面的库) 23 | implementation 'com.facebook.fresco:fresco:2.0.0' 24 | 25 | implementation 'xyz.zpayh:hdimageview-fresco:3.0.0' 26 | } 27 | ``` 28 | **Step 2.** Add the view to your layout XML 29 | ``` xml 30 | 35 | ``` 36 | **Step 3.** Set URI to HDImageView 37 | ``` java 38 | //... 39 | HDImageView mImageView = (HDImageView) findViewById(R.id.image); 40 | 41 | mImageView.setImageURI("res:///"+R.drawable.panorama); 42 | // Or 43 | ImageSource imageSource = ImageSourceBuilder.newBuilder() 44 | .setUri(R.drawable.panorama) 45 | .build(); 46 | mImageView.setImageSource(imageSource); 47 | ``` 48 | ## Supported URIs 49 | 50 | HDImageView supports images in a variety of locations. 51 | 52 | HDImageView does **not** accept relative URIs. All URIs must be absolute and must include the scheme. 53 | 54 | These are the URI schemes accepted: 55 | 56 | | TYPE | SCHEME | FETCH METHOD USED | 57 | |----------------|--------------------------|---------------------------| 58 | |File on network | http://, https:// | HttpURLConnection | 59 | |File on device | file:// | FileInputStream | 60 | |Content provider| content:// | ContentResolver | 61 | |Asset in app | asset:/// | AsseManager | 62 | |Resource in app | res:// as in res:///12345| Resources.openRawResource | 63 | 64 | Like this: 65 | ``` java 66 | mHDImageView.setImageURI("res:///"+R.drawable.panorama); 67 | mHDImageView.setImageURI("asset://beauty.jpg"); 68 | mHDImageView.setImageURI("file:///sdcard/DCIM/IMG_001.JPG"); 69 | mHDImageView.setImageURI("http://7xi8d6.com1.z0.glb.clouddn.com/2017-04-16-17934400_1738549946443321_2924146161843437568_n.jpg"); 70 | //.... 71 | ``` 72 | In the use of the process, please remember to add the appropriate permissions 73 | ## About 74 | Powered by [Subsampling Scale Image View](https://github.com/davemorrissey/subsampling-scale-image-view) 75 | 76 | Copyright 2016 David Morrissey, and licensed under the Apache License, Version 2.0. No attribution is necessary but it's very much appreciated. Star this project if you like it! -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | android { 3 | compileSdkVersion 29 4 | defaultConfig { 5 | applicationId "xyz.zpayh.original" 6 | minSdkVersion 16 7 | targetSdkVersion 29 8 | versionCode 1 9 | versionName "1.0" 10 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 | } 17 | } 18 | 19 | lintOptions{ 20 | abortOnError false 21 | } 22 | } 23 | 24 | dependencies { 25 | implementation fileTree(include: ['*.jar'], dir: 'libs') 26 | androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { 27 | exclude group: 'com.android.support', module: 'support-annotations' 28 | }) 29 | implementation project(':library') 30 | implementation 'androidx.appcompat:appcompat:1.2.0' 31 | implementation 'androidx.constraintlayout:constraintlayout:2.0.4' 32 | implementation 'com.google.android.material:material:1.2.1' 33 | implementation 'xyz.zpayh:sherlockadapter:2.0.0' 34 | testImplementation 'junit:junit:4.13.2' 35 | implementation 'androidx.cardview:cardview:1.0.0' 36 | implementation 'com.facebook.fresco:fresco:2.4.0' 37 | //implementation project(':support-fresco') 38 | //implementation project(':support-glide') 39 | //implementation 'xyz.zpayh:hdimageview-glide:3.0.0' 40 | //implementation 'xyz.zpayh:hdimageview:3.0.0' 41 | implementation 'com.github.bumptech.glide:glide:4.12.0' 42 | implementation 'androidx.exifinterface:exifinterface:1.3.2' 43 | } 44 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in H:\android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original imageSource file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /app/src/androidTest/java/xyz/zpayh/original/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original; 2 | 3 | import android.content.Context; 4 | import androidx.test.InstrumentationRegistry; 5 | import androidx.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("xyz.zpayh.original", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /app/src/main/assets/backlit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/assets/backlit.jpg -------------------------------------------------------------------------------- /app/src/main/assets/beauty.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/assets/beauty.jpg -------------------------------------------------------------------------------- /app/src/main/assets/girl/girl-2161202.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/assets/girl/girl-2161202.jpg -------------------------------------------------------------------------------- /app/src/main/assets/night-view.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/assets/night-view.jpg -------------------------------------------------------------------------------- /app/src/main/assets/woman-2212358.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/assets/woman-2212358.jpg -------------------------------------------------------------------------------- /app/src/main/assets/woman.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/assets/woman.jpg -------------------------------------------------------------------------------- /app/src/main/java/xyz/zpayh/original/BasicActivity.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original; 2 | 3 | import android.net.Uri; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.view.animation.AccelerateDecelerateInterpolator; 7 | import android.widget.Toast; 8 | 9 | import androidx.appcompat.app.AppCompatActivity; 10 | import androidx.appcompat.widget.Toolbar; 11 | 12 | import xyz.zpayh.hdimage.HDImageView; 13 | import xyz.zpayh.hdimage.ImageSizeOptions; 14 | import xyz.zpayh.hdimage.ImageSource; 15 | import xyz.zpayh.hdimage.ImageSourceBuilder; 16 | import xyz.zpayh.hdimage.ImageSourceLoadListener; 17 | 18 | import static xyz.zpayh.hdimage.state.ScaleType.CUSTOM; 19 | import static xyz.zpayh.original.UriConstants.IMAGE_11; 20 | import static xyz.zpayh.original.UriConstants.IMAGE_12; 21 | 22 | public class BasicActivity extends AppCompatActivity { 23 | 24 | private static final String TAG = "BasicActivity"; 25 | HDImageView mImageView; 26 | 27 | @Override 28 | protected void onCreate(Bundle savedInstanceState) { 29 | super.onCreate(savedInstanceState); 30 | setContentView(R.layout.act_basic); 31 | 32 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 33 | setSupportActionBar(toolbar); 34 | 35 | mImageView = (HDImageView) findViewById(R.id.image); 36 | mImageView.setMaxScale(20f); 37 | mImageView.setMinScale(1f); 38 | mImageView.setDoubleTapZoomScale(10F); 39 | mImageView.setScaleType(CUSTOM); 40 | if (savedInstanceState == null) { 41 | ImageSource imageSource = ImageSourceBuilder.newBuilder() 42 | .setUri(IMAGE_12) 43 | .setImageSourceLoadListener(new ImageSourceLoadListener() { 44 | @Override 45 | public void loadSuccess(Uri uri, ImageSizeOptions options) { 46 | float scaleW = mImageView.getWidth() / options.mWidth; 47 | float scaleH = mImageView.getHeight() / options.mHeight; 48 | mImageView.setMinScale(Math.min(1.0f,Math.min(scaleW, scaleH))); 49 | mImageView.resetScaleAndCenter(); 50 | } 51 | }) 52 | .build(); 53 | mImageView.setImageSource(imageSource); 54 | } 55 | 56 | mImageView.setOnLongClickListener(new View.OnLongClickListener() { 57 | @Override 58 | public boolean onLongClick(View v) { 59 | Toast.makeText(BasicActivity.this, "A Long Click Event", Toast.LENGTH_SHORT).show(); 60 | return true; 61 | } 62 | }); 63 | 64 | mImageView.setOnClickListener(new View.OnClickListener() { 65 | @Override 66 | public void onClick(View v) { 67 | Toast.makeText(BasicActivity.this, "A Click Event", Toast.LENGTH_SHORT).show(); 68 | } 69 | }); 70 | 71 | /*Spinner spinner = (Spinner) findViewById(R.id.sp_pan_state); 72 | spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 73 | @Override 74 | public void onItemSelected(AdapterView parent, View view, int position, long id) { 75 | if (position == 0){ 76 | mImageView.setTranslateLimit(INSIDE); 77 | }else if (position == 1){ 78 | mImageView.setTranslateLimit(OUTSIDE); 79 | }else if (position == 2){ 80 | mImageView.setTranslateLimit(CENTER); 81 | } 82 | } 83 | 84 | @Override 85 | public void onNothingSelected(AdapterView parent) { 86 | 87 | } 88 | });*/ 89 | 90 | /*spinner = (Spinner) findViewById(R.id.sp_orientation); 91 | spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 92 | @Override 93 | public void onItemSelected(AdapterView parent, View view, int position, long id) { 94 | if (position == 0){ 95 | mImageView.setOrientation(ORIENTATION_0); 96 | }else if (position == 1){ 97 | mImageView.setOrientation(ORIENTATION_90); 98 | }else if (position == 2){ 99 | mImageView.setOrientation(ORIENTATION_180); 100 | }else if (position == 3){ 101 | mImageView.setOrientation(ORIENTATION_270); 102 | } 103 | } 104 | 105 | @Override 106 | public void onNothingSelected(AdapterView parent) { 107 | 108 | } 109 | });*/ 110 | 111 | /*spinner = (Spinner) findViewById(R.id.sp_zoom); 112 | spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 113 | @Override 114 | public void onItemSelected(AdapterView parent, View view, int position, long id) { 115 | if (position == 0){ 116 | mImageView.setDoubleTapZoomStyle(ZOOM_FOCUS_FIXED); 117 | }else if (position == 1){ 118 | mImageView.setDoubleTapZoomStyle(ZOOM_FOCUS_CENTER); 119 | }else if (position == 2){ 120 | mImageView.setDoubleTapZoomStyle(ZOOM_FOCUS_CENTER_IMMEDIATE); 121 | } 122 | } 123 | 124 | @Override 125 | public void onNothingSelected(AdapterView parent) { 126 | 127 | } 128 | });*/ 129 | 130 | /*spinner = (Spinner) findViewById(R.id.sp_scale_type); 131 | spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 132 | @Override 133 | public void onItemSelected(AdapterView parent, View view, int position, long id) { 134 | if (position == 0){ 135 | mImageView.setScaleType(CENTER_INSIDE); 136 | }else if (position == 1){ 137 | mImageView.setScaleType(CENTER_CROP); 138 | }else if (position == 2){ 139 | mImageView.setScaleType(CUSTOM); 140 | } 141 | } 142 | 143 | @Override 144 | public void onNothingSelected(AdapterView parent) { 145 | 146 | } 147 | });*/ 148 | 149 | mImageView.setScaleAnimationInterpolator(new AccelerateDecelerateInterpolator()); 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /app/src/main/java/xyz/zpayh/original/MainActivity.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import androidx.annotation.NonNull; 6 | import androidx.appcompat.app.AppCompatActivity; 7 | import androidx.recyclerview.widget.LinearLayoutManager; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | import android.view.View; 10 | 11 | import java.util.ArrayList; 12 | import java.util.List; 13 | 14 | import xyz.zpayh.adapter.BaseAdapter; 15 | import xyz.zpayh.adapter.BaseViewHolder; 16 | import xyz.zpayh.adapter.OnItemClickListener; 17 | 18 | public class MainActivity extends AppCompatActivity { 19 | 20 | public static final String url = "http://7xi8d6.com1.z0.glb.clouddn.com/2017-03-24-17438359_1470934682925012_1066984844010979328_n.jpg"; 21 | 22 | private RecyclerView mRecyclerView; 23 | 24 | @Override 25 | protected void onCreate(Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_main); 28 | 29 | mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); 30 | mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 31 | final BaseAdapter adapter = new BaseAdapter() { 32 | @Override 33 | public int getLayoutRes(int index) { 34 | return R.layout.item_activity; 35 | } 36 | 37 | @Override 38 | public void convert(BaseViewHolder holder, String data, int index) { 39 | holder.setText(R.id.tv_name,data); 40 | } 41 | 42 | @Override 43 | public void bind(BaseViewHolder holder, int layoutRes) { 44 | 45 | } 46 | }; 47 | mRecyclerView.setAdapter(adapter); 48 | adapter.setOnItemClickListener(new OnItemClickListener() { 49 | @Override 50 | public void onItemClick(@NonNull View view, int adapterPosition) { 51 | String action = adapter.getData(adapterPosition); 52 | startActivity(action); 53 | } 54 | }); 55 | 56 | String activityName[] = getResources().getStringArray(R.array.activity_list); 57 | List data = new ArrayList<>(activityName.length); 58 | for (String name : activityName) { 59 | data.add(name); 60 | } 61 | adapter.setData(data); 62 | } 63 | 64 | private void startActivity(String action) { 65 | Intent intent = new Intent(action); 66 | startActivity(intent); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/xyz/zpayh/original/RecyclerViewActivity.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original; 2 | 3 | import android.net.Uri; 4 | import android.os.Bundle; 5 | import androidx.appcompat.app.AppCompatActivity; 6 | import androidx.recyclerview.widget.LinearLayoutManager; 7 | import androidx.recyclerview.widget.RecyclerView; 8 | import androidx.appcompat.widget.Toolbar; 9 | import android.util.Log; 10 | 11 | import java.util.ArrayList; 12 | import java.util.HashMap; 13 | import java.util.List; 14 | import java.util.Map; 15 | 16 | import xyz.zpayh.adapter.BaseAdapter; 17 | import xyz.zpayh.adapter.BaseViewHolder; 18 | import xyz.zpayh.hdimage.HDImageView; 19 | import xyz.zpayh.hdimage.ImageSizeOptions; 20 | import xyz.zpayh.hdimage.ImageSource; 21 | import xyz.zpayh.hdimage.ImageSourceBuilder; 22 | import xyz.zpayh.hdimage.ImageSourceLoadListener; 23 | 24 | import static xyz.zpayh.original.UriConstants.IMAGE_1; 25 | import static xyz.zpayh.original.UriConstants.IMAGE_10; 26 | import static xyz.zpayh.original.UriConstants.IMAGE_12; 27 | import static xyz.zpayh.original.UriConstants.IMAGE_2; 28 | import static xyz.zpayh.original.UriConstants.IMAGE_3; 29 | import static xyz.zpayh.original.UriConstants.IMAGE_4; 30 | import static xyz.zpayh.original.UriConstants.IMAGE_5; 31 | import static xyz.zpayh.original.UriConstants.IMAGE_6; 32 | import static xyz.zpayh.original.UriConstants.IMAGE_7; 33 | import static xyz.zpayh.original.UriConstants.IMAGE_8; 34 | import static xyz.zpayh.original.UriConstants.IMAGE_9; 35 | 36 | public class RecyclerViewActivity extends AppCompatActivity { 37 | 38 | private static final String TAG = "RecyclerViewActivity"; 39 | 40 | private RecyclerView mRecyclerView; 41 | private HDImageAdapter mAdapter; 42 | @Override 43 | protected void onCreate(Bundle savedInstanceState) { 44 | super.onCreate(savedInstanceState); 45 | setContentView(R.layout.act_recycler_view); 46 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 47 | setSupportActionBar(toolbar); 48 | 49 | mRecyclerView = (RecyclerView) findViewById(R.id.rv_list); 50 | mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 51 | mAdapter = new HDImageAdapter(); 52 | mRecyclerView.setAdapter(mAdapter); 53 | 54 | mCacheImageSize = new HashMap<>(); 55 | 56 | initData(); 57 | } 58 | 59 | private ImageSourceLoadListener mListener = new ImageSourceLoadListener() { 60 | @Override 61 | public void loadSuccess(Uri uri, ImageSizeOptions options) { 62 | Log.d(TAG, "uri:" + uri.toString()); 63 | mCacheImageSize.put(uri,options); 64 | } 65 | }; 66 | 67 | private void initData() { 68 | List data = new ArrayList<>(); 69 | data.add(getImageSource(IMAGE_1)); 70 | data.add(getImageSource(IMAGE_2)); 71 | data.add(getImageSource(IMAGE_3)); 72 | data.add(getImageSource(IMAGE_4)); 73 | data.add(getImageSource(IMAGE_5)); 74 | data.add(getImageSource(IMAGE_6)); 75 | data.add(getImageSource(IMAGE_7)); 76 | data.add(getImageSource(IMAGE_8)); 77 | data.add(getImageSource(IMAGE_9)); 78 | data.add(getImageSource(IMAGE_10)); 79 | data.add(getImageSource(IMAGE_12)); 80 | 81 | mAdapter.setData(data); 82 | } 83 | 84 | private Map mCacheImageSize; 85 | 86 | private ImageSource getImageSource(String uriString){ 87 | return ImageSourceBuilder.newBuilder() 88 | .setUri(uriString) 89 | .setImageSourceLoadListener(mListener) 90 | .build(); 91 | } 92 | 93 | private class HDImageAdapter extends BaseAdapter{ 94 | @Override 95 | public int getLayoutRes(int index) { 96 | return R.layout.item_hdimage_list; 97 | } 98 | 99 | @Override 100 | public void convert(BaseViewHolder holder, ImageSource data, int index) { 101 | HDImageView imageView = holder.find(R.id.hd_image); 102 | if (mCacheImageSize.containsKey(data.getUri())){ 103 | data.setImageSizeOptions(mCacheImageSize.get(data.getUri())); 104 | } 105 | imageView.setImageSource(data); 106 | } 107 | 108 | @Override 109 | public void bind(BaseViewHolder holder, int layoutRes) { 110 | 111 | } 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /app/src/main/java/xyz/zpayh/original/UriConstants.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original; 2 | 3 | import static xyz.zpayh.hdimage.datasource.BitmapDataSource.ASSET_SCHEME; 4 | import static xyz.zpayh.hdimage.datasource.BitmapDataSource.RESOURCE_SCHEME; 5 | 6 | /** 7 | * 文 件 名: UriConstants 8 | * 创 建 人: 陈志鹏 9 | * 创建日期: 2017/4/17 00:51 10 | * 邮 箱: ch_zh_p@qq.com 11 | * 修改时间: 12 | * 修改备注: 13 | */ 14 | 15 | public class UriConstants { 16 | 17 | public static final String IMAGE_1 = RESOURCE_SCHEME+"任意路径/"+R.drawable.girl1; 18 | public static final String IMAGE_2 = RESOURCE_SCHEME+"也可以为空/"+R.drawable.girl2; 19 | public static final String IMAGE_3 = RESOURCE_SCHEME+"/"+R.drawable.panorama; 20 | public static final String IMAGE_4 = ASSET_SCHEME+"woman.jpg"; 21 | public static final String IMAGE_5 = ASSET_SCHEME+"beauty.jpg"; 22 | public static final String IMAGE_6 = ASSET_SCHEME+"backlit.jpg"; 23 | public static final String IMAGE_7 = ASSET_SCHEME+"woman-2212358.jpg"; 24 | public static final String IMAGE_8 = ASSET_SCHEME+ "girl/girl-2161202.jpg"; 25 | public static final String IMAGE_9 = ASSET_SCHEME+"night-view.jpg"; 26 | public static final String IMAGE_10 = "https://pic1.zhimg.com/80/v2-4514d92451b190a0239a438a0736ec78_hd.jpg"; 27 | public static final String IMAGE_11 = "https://wx2.sinaimg.cn/large/005M94J9ly4fgh3xlpcefj31jk1yw0z2.jpg"; 28 | public static final String IMAGE_12 = "https://pic3.zhimg.com/50/v2-d1d8bceda83722c227feb03160f4a5a2_hd.webp"; 29 | public static final String IMAGE_13 = "https://pic2.zhimg.com/80/v2-374fdcfd9ec7e81ad4ca1098a48d5811_hd.jpg"; 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/xyz/zpayh/original/ViewPagerActivity.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original; 2 | 3 | import android.net.Uri; 4 | import android.os.Bundle; 5 | import androidx.viewpager.widget.ViewPager; 6 | import androidx.appcompat.app.AppCompatActivity; 7 | import androidx.appcompat.widget.Toolbar; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | import xyz.zpayh.original.adapter.HDImageViewAdapter; 13 | 14 | import static xyz.zpayh.original.UriConstants.IMAGE_1; 15 | import static xyz.zpayh.original.UriConstants.IMAGE_10; 16 | import static xyz.zpayh.original.UriConstants.IMAGE_2; 17 | import static xyz.zpayh.original.UriConstants.IMAGE_3; 18 | import static xyz.zpayh.original.UriConstants.IMAGE_4; 19 | import static xyz.zpayh.original.UriConstants.IMAGE_5; 20 | import static xyz.zpayh.original.UriConstants.IMAGE_6; 21 | import static xyz.zpayh.original.UriConstants.IMAGE_7; 22 | import static xyz.zpayh.original.UriConstants.IMAGE_8; 23 | import static xyz.zpayh.original.UriConstants.IMAGE_9; 24 | 25 | public class ViewPagerActivity extends AppCompatActivity { 26 | 27 | private ViewPager mViewPager; 28 | private HDImageViewAdapter mViewAdapter; 29 | 30 | @Override 31 | protected void onCreate(Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | setContentView(R.layout.act_view_pager); 34 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 35 | setSupportActionBar(toolbar); 36 | 37 | mViewPager = (ViewPager) findViewById(R.id.viewPager); 38 | mViewPager.setOffscreenPageLimit(5); 39 | mViewAdapter = new HDImageViewAdapter(this); 40 | mViewPager.setAdapter(mViewAdapter); 41 | 42 | initData(); 43 | } 44 | 45 | private void initData() { 46 | 47 | List data = new ArrayList<>(); 48 | data.add(Uri.parse(IMAGE_1)); 49 | data.add(Uri.parse(IMAGE_2)); 50 | data.add(Uri.parse(IMAGE_3)); 51 | data.add(Uri.parse(IMAGE_4)); 52 | data.add(Uri.parse(IMAGE_5)); 53 | data.add(Uri.parse(IMAGE_6)); 54 | data.add(Uri.parse(IMAGE_7)); 55 | data.add(Uri.parse(IMAGE_8)); 56 | data.add(Uri.parse(IMAGE_9)); 57 | data.add(Uri.parse(IMAGE_10)); 58 | 59 | mViewAdapter.addUris(data); 60 | } 61 | 62 | @Override 63 | protected void onStart() { 64 | super.onStart(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/xyz/zpayh/original/adapter/HDImageViewAdapter.java: -------------------------------------------------------------------------------- 1 | package xyz.zpayh.original.adapter; 2 | 3 | import android.content.Context; 4 | import android.graphics.Point; 5 | import android.net.Uri; 6 | import androidx.viewpager.widget.PagerAdapter; 7 | import android.view.Display; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.view.ViewGroup; 11 | import android.view.WindowManager; 12 | 13 | import java.util.ArrayList; 14 | import java.util.LinkedList; 15 | import java.util.List; 16 | 17 | import xyz.zpayh.hdimage.HDImageView; 18 | import xyz.zpayh.original.R; 19 | 20 | /** 21 | * 文 件 名: HDImageViewAdapter 22 | * 创 建 人: 陈志鹏 23 | * 创建日期: 2017/4/17 00:11 24 | * 邮 箱: ch_zh_p@qq.com 25 | * 修改时间: 26 | * 修改备注: 27 | */ 28 | 29 | public class HDImageViewAdapter extends PagerAdapter{ 30 | 31 | private static final int LONG_IMG_ASPECT_RATIO = 3; 32 | private static final int LONG_IMG_MINIMUM_LENGTH = 1500; 33 | 34 | private final List mHDImageUris; 35 | 36 | private final LinkedList mCacheViews; 37 | 38 | private Point mDisplaySize; 39 | 40 | public HDImageViewAdapter(Context context) { 41 | mHDImageUris = new ArrayList<>(); 42 | mCacheViews = new LinkedList<>(); 43 | mDisplaySize = new Point(); 44 | 45 | 46 | initDisplaySize(context); 47 | } 48 | 49 | private void initDisplaySize(Context context) { 50 | try { 51 | WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 52 | if (manager != null) { 53 | Display display = manager.getDefaultDisplay(); 54 | if (display != null) { 55 | display.getSize(mDisplaySize); 56 | } 57 | } 58 | } catch (Exception e) { 59 | e.printStackTrace(); 60 | } 61 | } 62 | 63 | public void setUris(List hdImageUris) { 64 | mHDImageUris.clear(); 65 | if (hdImageUris != null) { 66 | mHDImageUris.addAll(hdImageUris); 67 | } 68 | 69 | notifyDataSetChanged(); 70 | } 71 | 72 | public void addUri(Uri hdImageUri) { 73 | if (hdImageUri != null) { 74 | mHDImageUris.add(hdImageUri); 75 | notifyDataSetChanged(); 76 | } 77 | } 78 | 79 | public void addUris(List hdImageUris){ 80 | if (hdImageUris != null && !hdImageUris.isEmpty()) { 81 | mHDImageUris.addAll(hdImageUris); 82 | notifyDataSetChanged(); 83 | } 84 | } 85 | 86 | public Uri getHDImage(int position){ 87 | if (position < 0 || position >= mHDImageUris.size()){ 88 | return null; 89 | } 90 | return mHDImageUris.get(position); 91 | } 92 | 93 | @Override 94 | public int getCount() { 95 | return mHDImageUris.size(); 96 | } 97 | 98 | @Override 99 | public boolean isViewFromObject(View view, Object object) { 100 | return view == object; 101 | } 102 | 103 | @Override 104 | public Object instantiateItem(ViewGroup container, int position) { 105 | HDImageView imageView; 106 | View view; 107 | if (mCacheViews.isEmpty()){ 108 | view = LayoutInflater.from(container.getContext()) 109 | .inflate(R.layout.item_hdimage_pager,container,false); 110 | PageViewHolder holder = new PageViewHolder(view); 111 | holder.position = position; 112 | imageView = holder.mHDImageView; 113 | }else{ 114 | view = mCacheViews.remove(); 115 | PageViewHolder holder = (PageViewHolder) view.getTag(); 116 | holder.position = position; 117 | imageView = holder.mHDImageView; 118 | } 119 | 120 | final Uri pictureUri = mHDImageUris.get(position); 121 | 122 | imageView.setImageURI(pictureUri); 123 | 124 | container.addView(view); 125 | return view; 126 | } 127 | 128 | @Override 129 | public void destroyItem(ViewGroup container, int position, Object object) { 130 | View view = (View) object; 131 | container.removeView(view); 132 | mCacheViews.add(view); 133 | } 134 | 135 | private class PageViewHolder{ 136 | HDImageView mHDImageView; 137 | int position; 138 | 139 | public PageViewHolder(View view) { 140 | mHDImageView = (HDImageView) view.findViewById(R.id.hd_image); 141 | 142 | view.setTag(this); 143 | } 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/fix.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/drawable/fix.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/girl1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/drawable/girl1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/girl2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/drawable/girl2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/drawable/logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/panorama.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/drawable/panorama.jpg -------------------------------------------------------------------------------- /app/src/main/res/layout/act_basic.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/act_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/act_view_pager.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_basic.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 27 | 28 | 38 | 39 | 52 | 53 | 66 | 67 | 77 | 78 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_recycler_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/content_view_pager.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_hdimage_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_hdimage_pager.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-hdpi/big.jpg -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EvilBT/HDImageView/16d141e266a7d112f5882f2982c3f692d41129b1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Inside 5 | Outside 6 | Center 7 | 8 | 9 | 0 10 | 90 11 | 180 12 | 270 13 | 14 | 15 | Fixed 16 | Center 17 | Center Immediate 18 | 19 | 20 | 21 | Center Inside 22 | Center Crop 23 | Custom 24 | 25 | 26 | 27 | BasicActivity 28 | ViewPagerActivity 29 | RecyclerViewActivity 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16dp 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | HDImageView 3 | ViewPagerActivity 4 | RecyclerViewActivity 5 | BasicActivity 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 | 10 | 14 |