├── .gitignore ├── README.md ├── build.gradle ├── example ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── ufreedom │ │ └── countdowntextview │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── ufreedom │ │ │ └── countdowntextview │ │ │ ├── Analog.java │ │ │ ├── AnalogAdapter.java │ │ │ ├── AnalogData.java │ │ │ ├── AnalogHolder.java │ │ │ ├── BaseItemDecoration.java │ │ │ ├── MainActivity.java │ │ │ └── MyApplication.java │ └── res │ │ ├── drawable-xxhdpi │ │ ├── images.jpeg │ │ └── player_yugao_bg.9.png │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── content_main.xml │ │ └── layout_yummy_pic.xml │ │ ├── menu │ │ └── menu_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── ufreedom │ └── countdowntextview │ └── ExampleUnitTest.java ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── library ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── ufreedom │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── ufreedom │ │ │ ├── CountDownHelper.java │ │ │ ├── CountDownTextView.java │ │ │ └── ElapsedTimeUtil.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── com │ └── ufreedom │ └── ExampleUnitTest.java ├── screenshots └── demo.gif └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CountDownTextView 2 | A simple countdown widget and easy to use. 3 | 4 | ###Simple 5 | ------ 6 | 7 | ![demo](./screenshots/demo.gif) 8 | 9 | ###Usage 10 | ------ 11 | 12 | ```` java 13 | compile 'com.ufreedom.countdowntextview:library:0.1.0' 14 | ```` 15 | 16 | 17 | You can give it a start time in the `SystemClock.elapsedRealtime` timebase, and it counts down from that. 18 | 19 | By default it will not update the time value in text but give a callback `onTick()`,If you want to display the current timer value ,Please use `setAutoDisplayText(true)`. 20 | 21 | By default the display timer value is in the form "MM:SS" or "HH:MM:SS", you can use setTimeFormat() to use other format : 22 | 23 | | Time Format | Display | 24 | | -------- | ---- | 25 | | TIME_FORMAT_D_H_M_S | DD:HH:MM:SS | 26 | | TIME_FORMAT_H_M_S | HH:MM:SS | 27 | | TIME_FORMAT_M_S | MM:SS | 28 | | TIME_SHOW_S | SS | 29 | 30 | 31 | 32 | ``` java 33 | long timeInFuture = SystemClock.elapsedRealtime + 1000 * 60 * 20;//20 minutes 34 | 35 | CountDownTextView countDownTextView = findViewById(R.id.countDownTextView) 36 | countDownTextView.setTimeInFuture(timeInFuture); 37 | countDownTextView.setAutoShowText(true); 38 | countDownTextView.start(); 39 | 40 | ``` 41 | 42 | 43 | ###Callback 44 | ------ 45 | 46 | ``` java 47 | public interface CountDownCallback { 48 | 49 | /** 50 | * Callback fired on regular interval. 51 | * @param millisUntilFinished The amount of time until finished. 52 | */ 53 | void onTick(CountDownTextView countDownTextView,long millisUntilFinished); 54 | 55 | /** 56 | * Callback fired when the time is up. 57 | */ 58 | void onFinish(CountDownTextView countDownTextView); 59 | 60 | } 61 | ``` 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.3.0' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | 13 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0' 14 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | jcenter() 21 | } 22 | } 23 | 24 | task clean(type: Delete) { 25 | delete rootProject.buildDir 26 | } 27 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /example/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 22 5 | buildToolsVersion "22.0.1" 6 | 7 | defaultConfig { 8 | applicationId "com.ufreedom.countdowntextview" 9 | minSdkVersion 14 10 | targetSdkVersion 22 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | buildTypes { 15 | release { 16 | minifyEnabled false 17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 18 | } 19 | } 20 | } 21 | 22 | dependencies { 23 | compile fileTree(dir: 'libs', include: ['*.jar']) 24 | testCompile 'junit:junit:4.12' 25 | compile 'com.android.support:appcompat-v7:22.2.1' 26 | compile 'com.android.support:design:22.2.1' 27 | compile 'com.android.support:recyclerview-v7:22.2.0' 28 | compile 'com.android.support:support-annotations:22.2.0' 29 | compile 'com.facebook.fresco:fresco:0.6.1' 30 | compile 'com.facebook.fresco:imagepipeline-okhttp:0.6.1' 31 | compile project(':library') 32 | } 33 | -------------------------------------------------------------------------------- /example/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 /Users/yummy/Library/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 | -------------------------------------------------------------------------------- /example/src/androidTest/java/com/ufreedom/countdowntextview/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /example/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/Analog.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | /** 4 | * Author UFreedom 5 | * Date : 2015 十一月 08 6 | */ 7 | public class Analog { 8 | 9 | public static String [] getPics(){ 10 | return new String[] { 11 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 12 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 13 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 14 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 15 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 16 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 17 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 18 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 19 | "http://img3.3lian.com/2013/s1/65/d/104.jpg", 20 | }; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/AnalogAdapter.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Model on RecyclerView 12 | * 13 | * Author UFreedom, DChuan 14 | * Date : 16/11/2015 15 | */ 16 | public class AnalogAdapter extends RecyclerView.Adapter { 17 | 18 | private List datas; 19 | 20 | public AnalogAdapter(List analogDatas) { 21 | datas = analogDatas; 22 | } 23 | 24 | @Override 25 | public AnalogHolder onCreateViewHolder(ViewGroup parent, int viewType) { 26 | View view = 27 | LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_yummy_pic, parent, false); 28 | return new AnalogHolder(view); 29 | } 30 | 31 | @Override 32 | public void onBindViewHolder(AnalogHolder holder, int position) { 33 | holder.onBindView(datas.get(position)); 34 | } 35 | 36 | 37 | @Override 38 | public int getItemCount() { 39 | return datas.size(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/AnalogData.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | /** 4 | * Author SunMeng 5 | * Date : 2015 十月 29 6 | */ 7 | public class AnalogData { 8 | 9 | // Item background pic 10 | private String pic; 11 | 12 | // Start time to be shown on CountDownTextView 13 | private long scheduleTime; 14 | 15 | private int timeFormat; 16 | 17 | public AnalogData(String pic, long scheduleTime, int timeFormat) { 18 | this.scheduleTime = scheduleTime; 19 | this.pic = pic; 20 | this.timeFormat = timeFormat; 21 | } 22 | 23 | public String getPic() { 24 | return pic; 25 | } 26 | 27 | public void setPic(String pic) { 28 | this.pic = pic; 29 | } 30 | 31 | public long getScheduleTime() { 32 | return scheduleTime; 33 | } 34 | 35 | public void setScheduleTime(long scheduleTime) { 36 | this.scheduleTime = scheduleTime; 37 | } 38 | 39 | public int getTimeFormat() { 40 | return timeFormat; 41 | } 42 | 43 | public void setTimeFormat(int timeFormat) { 44 | this.timeFormat = timeFormat; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/AnalogHolder.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | import android.net.Uri; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.view.View; 6 | 7 | import com.facebook.drawee.backends.pipeline.Fresco; 8 | import com.facebook.drawee.interfaces.DraweeController; 9 | import com.facebook.drawee.view.SimpleDraweeView; 10 | import com.facebook.imagepipeline.common.ResizeOptions; 11 | import com.facebook.imagepipeline.request.ImageRequest; 12 | import com.facebook.imagepipeline.request.ImageRequestBuilder; 13 | import com.ufreedom.CountDownTextView; 14 | 15 | /** 16 | * Author UFreedom 17 | * Date : 2015 十月 29 18 | */ 19 | public class AnalogHolder extends RecyclerView.ViewHolder { 20 | 21 | private SimpleDraweeView simpleDraweeView; 22 | private CountDownTextView countDownTextView; 23 | 24 | public AnalogHolder(View itemView) { 25 | super(itemView); 26 | simpleDraweeView = (SimpleDraweeView) itemView.findViewById(R.id.simpleDraweeView); 27 | countDownTextView = (CountDownTextView) itemView.findViewById(R.id.countDownTextView); 28 | } 29 | 30 | public void onBindView(AnalogData object) { 31 | 32 | // Set SimpleDraweeView 33 | ImageRequest imageRequest = 34 | ImageRequestBuilder.newBuilderWithSource(Uri.parse(object.getPic())) 35 | .setResizeOptions(new ResizeOptions(300, 300)) 36 | .build(); 37 | DraweeController draweeController = Fresco.newDraweeControllerBuilder() 38 | .setImageRequest(imageRequest) 39 | .setOldController(simpleDraweeView.getController()) 40 | .setAutoPlayAnimations(true) 41 | .build(); 42 | simpleDraweeView.setController(draweeController); 43 | 44 | // Set CountDownTextView 45 | countDownTextView.setTimeInFuture(object.getScheduleTime()); 46 | countDownTextView.setAutoDisplayText(true); 47 | countDownTextView.setTimeFormat(object.getTimeFormat()); 48 | countDownTextView.start(); 49 | countDownTextView.addCountDownCallback(new CountDownTextView.CountDownCallback() { 50 | 51 | @Override 52 | public void onTick(CountDownTextView countDownTextView, long millisUntilFinished) { 53 | 54 | } 55 | 56 | @Override 57 | public void onFinish(CountDownTextView countDownTextView) { 58 | countDownTextView.setText("Time Over"); 59 | } 60 | }); 61 | 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/BaseItemDecoration.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | import android.graphics.Canvas; 4 | import android.graphics.Rect; 5 | import android.graphics.drawable.ColorDrawable; 6 | import android.graphics.drawable.Drawable; 7 | import android.support.v7.widget.RecyclerView; 8 | import android.view.View; 9 | 10 | /** 11 | * Author UFreedom 12 | * Date : 2015 十月 27 13 | */ 14 | public class BaseItemDecoration extends RecyclerView.ItemDecoration { 15 | 16 | private int mEdgeSpace; 17 | private int mHorizontalSpace; 18 | private int mVerticalSpace; 19 | private int mSpanCount; 20 | 21 | private Drawable drawable; 22 | 23 | 24 | 25 | /** 26 | * @param mEdgeSpace 最外面的边距 27 | * @param mHorizontalSpace 水平间距 28 | * @param mVerticalSpace 垂直间距 29 | * @param mSpanCount 列数 30 | */ 31 | public BaseItemDecoration(int mEdgeSpace, int mHorizontalSpace, int mVerticalSpace, int mSpanCount) { 32 | this.mEdgeSpace = mEdgeSpace; 33 | this.mHorizontalSpace = mHorizontalSpace; 34 | this.mVerticalSpace = mVerticalSpace; 35 | this.mSpanCount = mSpanCount; 36 | } 37 | 38 | 39 | /** 40 | * 41 | * @param mEdgeSpace 42 | * @param mHorizontalSpace 43 | * @param mVerticalSpace 44 | * @param mSpanCount 45 | * @param color 间距颜色 46 | */ 47 | public BaseItemDecoration(int mEdgeSpace, int mHorizontalSpace, int mVerticalSpace, int mSpanCount, int color) { 48 | this.mEdgeSpace = mEdgeSpace; 49 | this.mHorizontalSpace = mHorizontalSpace; 50 | this.mVerticalSpace = mVerticalSpace; 51 | this.mSpanCount = mSpanCount; 52 | drawable = new ColorDrawable(color); 53 | } 54 | 55 | 56 | @Override 57 | public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { 58 | super.onDraw(c, parent, state); 59 | 60 | if (drawable == null){ 61 | return; 62 | } 63 | 64 | final int childCount = parent.getChildCount(); 65 | 66 | for (int position = 0; position < childCount; position++) { 67 | 68 | Rect rect = new Rect(); 69 | 70 | int column = position % mSpanCount; 71 | 72 | final View child = parent.getChildAt(position); 73 | 74 | rect.left = child.getLeft() - (column == 0 ? mEdgeSpace : mHorizontalSpace / 2 ); 75 | rect.right = child.getRight() + (column == mSpanCount - 1 ? mEdgeSpace : mHorizontalSpace ); 76 | 77 | //只有第一行画顶部的空间,后面的顶部空间全部以上一行的底部空间 78 | if (column < mSpanCount) { 79 | rect.top = child.getTop() ; 80 | }else { 81 | rect.top = child.getTop() - mVerticalSpace; 82 | } 83 | rect.bottom = child.getBottom() + mVerticalSpace; 84 | drawable.setBounds(rect); 85 | drawable.draw(c); 86 | } 87 | 88 | } 89 | 90 | 91 | 92 | 93 | 94 | @Override 95 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 96 | 97 | int position = parent.getChildAdapterPosition(view); 98 | int column = position % mSpanCount; 99 | outRect.left = (column == 0 ? mEdgeSpace : mHorizontalSpace / 2 ); 100 | outRect.right = (column == mSpanCount - 1 ? mEdgeSpace : mHorizontalSpace /2); 101 | 102 | //只有第一行画顶部的空间,后面的顶部空间全部以上一行的底部空间 103 | if (position < mSpanCount) { 104 | // outRect.top = mVerticalSpace; 105 | outRect.top = 0; 106 | } 107 | outRect.bottom = mVerticalSpace; 108 | 109 | } 110 | 111 | 112 | // public abstract void setItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state); 113 | 114 | } 115 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | import android.graphics.Color; 4 | import android.os.Bundle; 5 | import android.os.SystemClock; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | import android.support.v7.widget.RecyclerView; 9 | import android.support.v7.widget.Toolbar; 10 | 11 | import com.ufreedom.CountDownTextView; 12 | 13 | import java.util.ArrayList; 14 | import java.util.Arrays; 15 | import java.util.List; 16 | import java.util.Random; 17 | 18 | public class MainActivity extends AppCompatActivity { 19 | 20 | private RecyclerView recyclerView; 21 | private AnalogAdapter analogAdapter; 22 | private Random random; 23 | 24 | @Override 25 | protected void onCreate(Bundle savedInstanceState) { 26 | super.onCreate(savedInstanceState); 27 | setContentView(R.layout.activity_main); 28 | 29 | // Set Tool Bar 30 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 31 | toolbar.setTitleTextColor(Color.WHITE); 32 | setSupportActionBar(toolbar); 33 | 34 | // Set RecyclerView 35 | recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 36 | recyclerView.setLayoutManager(new LinearLayoutManager(this)); 37 | List analogDatas = new ArrayList<>(); 38 | List pics = Arrays.asList(Analog.getPics()); 39 | 40 | analogDatas.add(new AnalogData("http://img3.3lian.com/2013/s1/65/d/104.jpg", 41 | getRandomTime(CountDownTextView.TIME_SHOW_D_H_M_S), 42 | CountDownTextView.TIME_SHOW_D_H_M_S)); 43 | analogDatas.add(new AnalogData("http://img3.3lian.com/2013/s1/65/d/104.jpg", 44 | getRandomTime(CountDownTextView.TIME_SHOW_H_M_S), 45 | CountDownTextView.TIME_SHOW_H_M_S)); 46 | analogDatas.add(new AnalogData("http://img3.3lian.com/2013/s1/65/d/104.jpg", 47 | getRandomTime(CountDownTextView.TIME_SHOW_M_S), 48 | CountDownTextView.TIME_SHOW_M_S)); 49 | analogDatas.add(new AnalogData("http://img3.3lian.com/2013/s1/65/d/104.jpg", 50 | getRandomTime(CountDownTextView.TIME_SHOW_S), 51 | CountDownTextView.TIME_SHOW_S)); 52 | 53 | BaseItemDecoration baseItemDecoration = new BaseItemDecoration(32,0,16,1); 54 | recyclerView.addItemDecoration(baseItemDecoration); 55 | 56 | analogAdapter = new AnalogAdapter(analogDatas); 57 | recyclerView.setAdapter(analogAdapter); 58 | 59 | } 60 | 61 | /** 62 | * Generates random time 63 | * @return 64 | */ 65 | private long getRandomTime(int _timeFormat){ 66 | 67 | if(random == null) { 68 | random = new Random(); 69 | } 70 | 71 | long hour = 0; 72 | long minute = 0; 73 | long seconds = 0; 74 | 75 | switch (_timeFormat) { 76 | case CountDownTextView.TIME_SHOW_D_H_M_S: 77 | case CountDownTextView.TIME_SHOW_H_M_S: 78 | hour = 1000 * 60 * 60 * (/*random.nextInt(10)*/10 + 1); 79 | case CountDownTextView.TIME_SHOW_M_S: 80 | minute = 1000 * 60 * (random.nextInt(10) + 1); 81 | case CountDownTextView.TIME_SHOW_S: 82 | seconds = 1000 * (random.nextInt(10) + 1); 83 | break; 84 | } 85 | 86 | return SystemClock.elapsedRealtime() + hour + minute + seconds; 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /example/src/main/java/com/ufreedom/countdowntextview/MyApplication.java: -------------------------------------------------------------------------------- 1 | package com.ufreedom.countdowntextview; 2 | 3 | import android.app.Application; 4 | 5 | import com.facebook.drawee.backends.pipeline.Fresco; 6 | import com.facebook.imagepipeline.backends.okhttp.OkHttpImagePipelineConfigFactory; 7 | import com.facebook.imagepipeline.core.ImagePipelineConfig; 8 | import com.squareup.okhttp.OkHttpClient; 9 | 10 | /** 11 | * Author SunMeng 12 | * Date : 2015 十一月 08 13 | */ 14 | public class MyApplication extends Application{ 15 | 16 | @Override 17 | public void onCreate() { 18 | super.onCreate(); 19 | ImagePipelineConfig config = OkHttpImagePipelineConfigFactory 20 | .newBuilder(this, new OkHttpClient()) 21 | .build(); 22 | Fresco.initialize(this, config); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/images.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/drawable-xxhdpi/images.jpeg -------------------------------------------------------------------------------- /example/src/main/res/drawable-xxhdpi/player_yugao_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/drawable-xxhdpi/player_yugao_bg.9.png -------------------------------------------------------------------------------- /example/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 19 | 20 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /example/src/main/res/layout/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 14 | 15 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /example/src/main/res/layout/layout_yummy_pic.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 17 | 29 | 30 | 37 | 38 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /example/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /example/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UFreedom/CountDownTextView/f25c3768eabb1c81e8151772fee798f217ea0180/example/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | > 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /example/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /example/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /example/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 7 | -------------------------------------------------------------------------------- /example/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | CountDownTextView 3 | Settings 4 | 5 | -------------------------------------------------------------------------------- /example/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |