├── .gitignore ├── .idea ├── compiler.xml ├── encodings.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── taylor │ │ └── lib │ │ └── framesurfaceview │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── frame4.png │ ├── java │ │ └── taylor │ │ │ └── com │ │ │ └── framesurfaceview │ │ │ └── MainActivity.java │ └── res │ │ ├── drawable-v24 │ │ ├── frame0.png │ │ ├── frame1.png │ │ ├── frame10.png │ │ ├── frame11.png │ │ ├── frame12.png │ │ ├── frame13.png │ │ ├── frame14.png │ │ ├── frame15.png │ │ ├── frame16.png │ │ ├── frame17.png │ │ ├── frame18.png │ │ ├── frame19.png │ │ ├── frame2.png │ │ ├── frame3.png │ │ ├── frame4.png │ │ ├── frame5.png │ │ ├── frame6.png │ │ ├── frame7.png │ │ ├── frame8.png │ │ ├── frame9.png │ │ ├── ic_launcher_foreground.xml │ │ ├── watch_reward_1.png │ │ ├── watch_reward_10.png │ │ ├── watch_reward_11.png │ │ ├── watch_reward_12.png │ │ ├── watch_reward_13.png │ │ ├── watch_reward_14.png │ │ ├── watch_reward_15.png │ │ ├── watch_reward_16.png │ │ ├── watch_reward_17.png │ │ ├── watch_reward_18.png │ │ ├── watch_reward_19.png │ │ ├── watch_reward_2.png │ │ ├── watch_reward_20.png │ │ ├── watch_reward_21.png │ │ ├── watch_reward_22.png │ │ ├── watch_reward_3.png │ │ ├── watch_reward_4.png │ │ ├── watch_reward_5.png │ │ ├── watch_reward_6.png │ │ ├── watch_reward_7.png │ │ ├── watch_reward_8.png │ │ └── watch_reward_9.png │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ └── content_main.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.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 │ │ ├── raw │ │ ├── frame0.png │ │ ├── frame1.png │ │ ├── frame10.png │ │ ├── frame11.png │ │ ├── frame12.png │ │ ├── frame13.png │ │ ├── frame14.png │ │ ├── frame15.png │ │ ├── frame16.png │ │ ├── frame17.png │ │ ├── frame18.png │ │ ├── frame19.png │ │ ├── frame2.png │ │ ├── frame3.png │ │ ├── frame4.png │ │ ├── frame5.png │ │ ├── frame6.png │ │ ├── frame7.png │ │ ├── frame8.png │ │ └── frame9.png │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── taylor │ └── lib │ └── framesurfaceview │ └── ExampleUnitTest.java ├── build.gradle ├── framesurfaceview ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── taylor │ │ └── lib │ │ └── framesurfaceview │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── taylor │ │ │ └── lib │ │ │ └── framesurfaceview │ │ │ ├── BaseSurfaceView.java │ │ │ ├── FrameSurfaceView.java │ │ │ ├── LinkedBitmap.java │ │ │ ├── LinkedBlockingQueue.java │ │ │ ├── MethodUtil.java │ │ │ └── NumberUtil.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── taylor │ └── lib │ └── framesurfaceview │ └── ExampleUnitTest.java ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FrameSurfaceView 2 | - play frame animation by SurfaceView instead of AnimationDrawable which is esay to cause OOM. 3 | - play frame animation smoothly with huge frame image(1MB). 4 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 28 5 | defaultConfig { 6 | applicationId "taylor.com.framesurfaceview" 7 | minSdkVersion 15 8 | targetSdkVersion 28 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation fileTree(dir: 'libs', include: ['*.jar']) 23 | implementation 'com.android.support:appcompat-v7:28.0.0' 24 | implementation 'com.android.support.constraint:constraint-layout:1.1.3' 25 | implementation 'com.android.support:design:28.0.0' 26 | testImplementation 'junit:junit:4.12' 27 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 28 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 29 | 30 | implementation project(':framesurfaceview') 31 | 32 | 33 | // implementation 'rapid.decoder:library:0.3.0' 34 | // implementation 'rapid.decoder:png-decoder:0.3.0' 35 | } 36 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/taylor/lib/framesurfaceview/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package taylor.lib.framesurfaceview; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.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 | * Instrumented 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() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("taylor.com.framesurfaceview", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/assets/frame4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/assets/frame4.png -------------------------------------------------------------------------------- /app/src/main/java/taylor/com/framesurfaceview/MainActivity.java: -------------------------------------------------------------------------------- 1 | package taylor.com.framesurfaceview; 2 | 3 | import android.graphics.BitmapFactory; 4 | import android.graphics.drawable.AnimationDrawable; 5 | import android.os.Bundle; 6 | import android.support.annotation.Nullable; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.view.View; 9 | import android.widget.ImageView; 10 | 11 | import java.io.IOException; 12 | import java.io.InputStream; 13 | import java.util.Arrays; 14 | import java.util.List; 15 | 16 | //import rapid.decoder.BitmapDecoder; 17 | import taylor.lib.framesurfaceview.NumberUtil; 18 | import taylor.lib.framesurfaceview.FrameSurfaceView; 19 | import taylor.lib.framesurfaceview.MethodUtil; 20 | 21 | public class MainActivity extends AppCompatActivity { 22 | 23 | private FrameSurfaceView frameSurfaceView; 24 | public static final int FRAM_ANIMATION_DURATION = 600; 25 | 26 | private List normalBitmaps = Arrays.asList( 27 | R.drawable.watch_reward_1, 28 | R.drawable.watch_reward_2, 29 | R.drawable.watch_reward_3, 30 | R.drawable.watch_reward_4, 31 | R.drawable.watch_reward_5, 32 | R.drawable.watch_reward_6, 33 | R.drawable.watch_reward_7, 34 | R.drawable.watch_reward_8, 35 | R.drawable.watch_reward_9, 36 | R.drawable.watch_reward_10, 37 | R.drawable.watch_reward_11, 38 | R.drawable.watch_reward_12, 39 | R.drawable.watch_reward_13, 40 | R.drawable.watch_reward_14, 41 | R.drawable.watch_reward_15, 42 | R.drawable.watch_reward_16, 43 | R.drawable.watch_reward_17, 44 | R.drawable.watch_reward_18, 45 | R.drawable.watch_reward_19, 46 | R.drawable.watch_reward_20, 47 | R.drawable.watch_reward_21, 48 | R.drawable.watch_reward_22 49 | ); 50 | private List hugeBitmaps = Arrays.asList( 51 | R.raw.frame0, 52 | R.raw.frame1, 53 | R.raw.frame2, 54 | R.raw.frame3, 55 | R.raw.frame4, 56 | R.raw.frame5, 57 | R.raw.frame6, 58 | R.raw.frame7, 59 | R.raw.frame8, 60 | R.raw.frame9, 61 | R.raw.frame10, 62 | R.raw.frame11, 63 | R.raw.frame12, 64 | R.raw.frame13, 65 | R.raw.frame14, 66 | R.raw.frame15, 67 | R.raw.frame16, 68 | R.raw.frame17, 69 | R.raw.frame18, 70 | R.raw.frame19 71 | ); 72 | private AnimationDrawable animationDrawable; 73 | 74 | @Override 75 | protected void onCreate(@Nullable Bundle savedInstanceState) { 76 | super.onCreate(savedInstanceState); 77 | setContentView(R.layout.activity_main); 78 | 79 | findViewById(R.id.btn_decode_resource).setOnClickListener(new View.OnClickListener() { 80 | @Override 81 | public void onClick(View v) { 82 | long span = MethodUtil.time(new Runnable() { 83 | @Override 84 | public void run() { 85 | BitmapFactory.decodeResource(getResources(), R.drawable.frame4); 86 | } 87 | }); 88 | NumberUtil.average("decode resource", span); 89 | } 90 | }); 91 | 92 | findViewById(R.id.btn_decode_stream).setOnClickListener(new View.OnClickListener() { 93 | @Override 94 | public void onClick(View v) { 95 | long span = MethodUtil.time(new Runnable() { 96 | @Override 97 | public void run() { 98 | InputStream inputStream = getResources().openRawResource(R.raw.frame4); 99 | BitmapFactory.decodeStream(inputStream); 100 | } 101 | }); 102 | NumberUtil.average("decode stream", span); 103 | } 104 | }); 105 | 106 | findViewById(R.id.btn_rapid_decode).setOnClickListener(new View.OnClickListener() { 107 | @Override 108 | public void onClick(View v) { 109 | long span = MethodUtil.time(new Runnable() { 110 | @Override 111 | public void run() { 112 | InputStream inputStream = getResources().openRawResource(R.raw.frame4); 113 | // BitmapDecoder.from(inputStream).decode(); 114 | } 115 | }); 116 | NumberUtil.average("rapid decode", span); 117 | } 118 | }); 119 | 120 | findViewById(R.id.btn_decode_asset).setOnClickListener(new View.OnClickListener() { 121 | @Override 122 | public void onClick(View v) { 123 | long span = MethodUtil.time(new Runnable() { 124 | @Override 125 | public void run() { 126 | InputStream inputStream = null; 127 | try { 128 | inputStream = getAssets().open("frame4.png"); 129 | } catch (IOException e) { 130 | e.printStackTrace(); 131 | } 132 | BitmapFactory.decodeStream(inputStream); 133 | } 134 | }); 135 | NumberUtil.average("assets decode", span); 136 | } 137 | }); 138 | findViewById(R.id.btn_start_2).setOnClickListener(new View.OnClickListener() { 139 | @Override 140 | public void onClick(View v) { 141 | startAnimationByAnimationDrawable(); 142 | } 143 | }); 144 | 145 | findViewById(R.id.btn_start_3).setOnClickListener(new View.OnClickListener() { 146 | @Override 147 | public void onClick(View v) { 148 | ImageView iv = findViewById(R.id.iv2); 149 | iv.setImageDrawable(animationDrawable); 150 | animationDrawable.start(); 151 | } 152 | }); 153 | 154 | findViewById(R.id.btn_start).setOnClickListener(new View.OnClickListener() { 155 | @Override 156 | public void onClick(View v) { 157 | //play frame animation by FrameSurfaceView which is much more memory-efficient than AnimationDrawable 158 | frameSurfaceView.setRepeatTimes(FrameSurfaceView.INFINITE); 159 | frameSurfaceView.start(); 160 | } 161 | }); 162 | 163 | frameSurfaceView = findViewById(R.id.sv_frame); 164 | frameSurfaceView.setBitmapIds(hugeBitmaps); 165 | frameSurfaceView.setDuration(FRAM_ANIMATION_DURATION); 166 | 167 | } 168 | 169 | /** 170 | * play frame animation by AnimationDrawable which will cause a disaster to memory if bitmap is huge(around 1MB) 171 | */ 172 | private void startAnimationByAnimationDrawable() { 173 | animationDrawable = new AnimationDrawable(); 174 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame1), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 175 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame2), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 176 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame3), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 177 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame4), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 178 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame5), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 179 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame6), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 180 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame7), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 181 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame8), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 182 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame9), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 183 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame10), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 184 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame11), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 185 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame12), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 186 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame13), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 187 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame14), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 188 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame15), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 189 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame16), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 190 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame17), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 191 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame18), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 192 | animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame19), FRAM_ANIMATION_DURATION/hugeBitmaps.size()); 193 | animationDrawable.setOneShot(true); 194 | 195 | ImageView ivFrameAnim = ((ImageView) findViewById(R.id.ivFrameAnimation)); 196 | ivFrameAnim.setImageDrawable(animationDrawable); 197 | animationDrawable.start(); 198 | } 199 | 200 | @Override 201 | protected void onDestroy() { 202 | super.onDestroy(); 203 | frameSurfaceView.destroy(); 204 | } 205 | } 206 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame0.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame10.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame11.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame12.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame13.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame14.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame15.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame16.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame17.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame18.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame19.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame7.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame8.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/frame9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/frame9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_10.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_11.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_12.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_13.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_14.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_15.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_16.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_17.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_18.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_19.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_20.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_21.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_22.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_7.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_8.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/watch_reward_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wisdomtl/FrameSurfaceView/8a67815ec6ba024eac2d3e364133cf9ef5b5d467/app/src/main/res/drawable-v24/watch_reward_9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 18 | 19 | 26 | 27 | 35 | 36 | 37 | 42 | 43 |