├── .gitignore ├── .idea ├── compiler.xml ├── deploymentTargetDropDown.xml ├── gradle.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── webabcd │ │ └── androiddemo │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── AndroidManifest.xml.readme │ ├── assets │ │ ├── URLSchemeDemo1.html │ │ ├── WebViewDemo2.html │ │ ├── WebViewDemo3.html │ │ ├── ad.mp4 │ │ ├── site_map.json │ │ ├── son.jpg │ │ └── text_storage_storagedemo3.txt │ ├── java │ │ └── com │ │ │ └── webabcd │ │ │ └── androiddemo │ │ │ ├── MainActivity.java │ │ │ ├── MainExpandableListAdapter.java │ │ │ ├── MainNavigationBean.java │ │ │ ├── MyApplication.java │ │ │ ├── OnGroupExpandedListener.java │ │ │ ├── SplashActivity.java │ │ │ ├── activity │ │ │ ├── ActivityDemo1.java │ │ │ ├── ActivityDemo1_2.java │ │ │ ├── ActivityDemo2.java │ │ │ ├── ActivityDemo3.java │ │ │ ├── ActivityDemo3_2.java │ │ │ ├── ActivityDemo4.java │ │ │ ├── ActivityDemo4_2.java │ │ │ ├── ActivityDemo4_3.java │ │ │ ├── ActivityDemo5.java │ │ │ ├── ActivityDemo5_2.java │ │ │ ├── ActivityDemo5_3.java │ │ │ ├── ActivityDemo6.java │ │ │ └── ActivityDemo6_2.java │ │ │ ├── animation │ │ │ ├── AnimationDemo1.java │ │ │ ├── AnimationDemo2.java │ │ │ ├── AnimationDemo3.java │ │ │ ├── AnimationDemo3CustomInterpolator.java │ │ │ ├── AnimationDemo4.java │ │ │ ├── AnimationDemo5.java │ │ │ ├── AnimationDemo5CustomTypeEvaluator.java │ │ │ ├── AnimationDemo6.java │ │ │ ├── AnimationDemo7.java │ │ │ ├── MatrixDemo1.java │ │ │ ├── MatrixDemo2.java │ │ │ └── MatrixDemo2CustomView.java │ │ │ ├── async │ │ │ ├── AsyncTaskDemo1.java │ │ │ ├── FutureTaskDemo1.java │ │ │ ├── FutureTaskDemo2.java │ │ │ ├── HandlerDemo1.java │ │ │ ├── HandlerDemo2.java │ │ │ ├── HandlerDemo3.java │ │ │ ├── ThreadDemo1.java │ │ │ ├── ThreadDemo2.java │ │ │ ├── ThreadDemo3.java │ │ │ ├── ThreadDemo4.java │ │ │ ├── ThreadDemo5.java │ │ │ ├── ThreadDemo6.java │ │ │ ├── ThreadLocalDemo1.java │ │ │ ├── ThreadPoolDemo1.java │ │ │ ├── ThreadPoolDemo2.java │ │ │ └── TimerDemo1.java │ │ │ ├── concurrent │ │ │ ├── AtomicDemo1.java │ │ │ ├── CountDownLatchDemo1.java │ │ │ ├── CyclicBarrierDemo1.java │ │ │ ├── LockDemo1.java │ │ │ ├── LockDemo2.java │ │ │ ├── LockDemo3.java │ │ │ ├── ReadWriteLockDemo1.java │ │ │ ├── ReentrantLockDemo1.java │ │ │ ├── ReentrantReadWriteLockDemo1.java │ │ │ ├── SemaphoreDemo1.java │ │ │ ├── SynchronizedDemo1.java │ │ │ ├── SynchronizedDemo2.java │ │ │ └── VolatileDemo1.java │ │ │ ├── designpattern │ │ │ ├── Singleton.java │ │ │ └── SingletonPattern.java │ │ │ ├── fragment │ │ │ ├── Fragment1_1.java │ │ │ ├── Fragment2_1.java │ │ │ ├── Fragment2_2.java │ │ │ ├── Fragment3_1.java │ │ │ ├── Fragment4_1.java │ │ │ ├── FragmentDemo1.java │ │ │ ├── FragmentDemo1_2.java │ │ │ ├── FragmentDemo2.java │ │ │ ├── FragmentDemo3.java │ │ │ └── FragmentDemo4.java │ │ │ ├── input │ │ │ ├── GestureDemo1.java │ │ │ ├── GestureDemo2.java │ │ │ ├── GestureDemo3.java │ │ │ ├── KeyDemo1.java │ │ │ ├── TouchDemo1.java │ │ │ ├── TouchDemo2.java │ │ │ ├── TouchDemo3.java │ │ │ ├── TouchDemo4.java │ │ │ ├── TouchDemo4_CustomView.java │ │ │ ├── TouchDemo5.java │ │ │ └── TouchDemo5_CustomView.java │ │ │ ├── ipc │ │ │ ├── BroadcastDemo1.java │ │ │ ├── BroadcastDemo2.java │ │ │ ├── BroadcastDemo3.java │ │ │ ├── ClipboardDemo1.java │ │ │ ├── ContentProviderDemo1.java │ │ │ ├── PackageDemo1.java │ │ │ ├── ShareSourceDemo1.java │ │ │ └── URLSchemeDemo1.java │ │ │ ├── java │ │ │ ├── BitDemo1.java │ │ │ ├── CallbackDemo1.java │ │ │ ├── CallbackDemo1_CallbackClass.java │ │ │ └── CallbackDemo1_CallbackInterface.java │ │ │ ├── jetpack │ │ │ └── lifecycle │ │ │ │ ├── DataBindingDemo.kt │ │ │ │ ├── LifecycleDemo.kt │ │ │ │ ├── LiveDataDemo.kt │ │ │ │ ├── LiveDataDemo2.kt │ │ │ │ └── ViewModelDemo.kt │ │ │ ├── kotlin │ │ │ ├── Demo1.kt │ │ │ ├── Demo10.kt │ │ │ ├── Demo11.kt │ │ │ ├── Demo12.kt │ │ │ ├── Demo2.kt │ │ │ ├── Demo3.kt │ │ │ ├── Demo4.kt │ │ │ ├── Demo5.kt │ │ │ ├── Demo6.kt │ │ │ ├── Demo7.kt │ │ │ ├── Demo7_Class.kt │ │ │ ├── Demo8.kt │ │ │ ├── Demo8_Abstract.kt │ │ │ ├── Demo8_Class1.kt │ │ │ ├── Demo8_Class2.kt │ │ │ ├── Demo8_Class3.kt │ │ │ ├── Demo8_Class4.kt │ │ │ ├── Demo8_Interface1.kt │ │ │ ├── Demo8_Interface2.kt │ │ │ ├── Demo9.kt │ │ │ ├── Demo9_DataClass.kt │ │ │ ├── Demo9_Enum.kt │ │ │ ├── Demo9_SealedClass.kt │ │ │ ├── HelloWorld.kt │ │ │ ├── HelloWorld_Java.java │ │ │ ├── HelloWorld_Kotlin.kt │ │ │ └── coroutine │ │ │ │ ├── Demo1.kt │ │ │ │ ├── Demo2.kt │ │ │ │ ├── Demo3.kt │ │ │ │ ├── Demo4.kt │ │ │ │ ├── Demo5.kt │ │ │ │ ├── Demo6.kt │ │ │ │ └── Demo7.kt │ │ │ ├── ndk │ │ │ └── NdkDemo1.java │ │ │ ├── notification │ │ │ ├── NotificationDemo1.java │ │ │ ├── NotificationDemo1Click.java │ │ │ ├── NotificationDemo2.java │ │ │ └── ToastDemo1.java │ │ │ ├── optimize │ │ │ ├── Demo1.java │ │ │ ├── Demo2.java │ │ │ ├── Demo3.java │ │ │ ├── Demo4.java │ │ │ └── MyUncaughtExceptionHandler.java │ │ │ ├── resource │ │ │ ├── LocalizationDemo1.java │ │ │ ├── MetaDataDemo1.java │ │ │ ├── Temp.java │ │ │ └── XmlDemo1.java │ │ │ ├── service │ │ │ ├── DownloadManagerDemo1.java │ │ │ ├── Service1.java │ │ │ ├── ServiceDemo1.java │ │ │ ├── Worker1.java │ │ │ └── WorkerManagerDemo1.java │ │ │ ├── storage │ │ │ ├── Android11Demo1.java │ │ │ ├── Android11Demo2.java │ │ │ ├── Android11Demo3.java │ │ │ ├── SharedPreferencesDemo1.java │ │ │ ├── SqliteDemo1.java │ │ │ ├── StorageDemo1.java │ │ │ ├── StorageDemo2.java │ │ │ └── StorageDemo3.java │ │ │ ├── tools │ │ │ ├── GenerateHtmlIndex.java │ │ │ └── GenerateReadme.java │ │ │ ├── ui │ │ │ ├── ColorDemo1.java │ │ │ ├── ConfigurationChangeDemo1.java │ │ │ ├── DensityDemo1.java │ │ │ ├── IconDemo1.java │ │ │ ├── ImmersiveDemo1.java │ │ │ ├── ImmersiveDemo2.java │ │ │ ├── NavigationBarDemo1.java │ │ │ ├── ShapeDemo1.java │ │ │ ├── ShapeDemo2.java │ │ │ ├── ShapeDemo3.java │ │ │ ├── StatusBarDemo1.java │ │ │ ├── StyleDemo1.java │ │ │ ├── ThemeDemo1.java │ │ │ ├── ThemeDemo2.java │ │ │ └── ThemeDemo3.java │ │ │ ├── utils │ │ │ ├── Demo1.java │ │ │ ├── Demo2.java │ │ │ ├── Demo3.java │ │ │ └── Helper.java │ │ │ └── view │ │ │ ├── ViewDemo1.java │ │ │ ├── ViewDemo2.java │ │ │ ├── ViewDemo3.java │ │ │ ├── button │ │ │ ├── ButtonDemo1.java │ │ │ ├── ButtonDemo2.java │ │ │ └── ImageButtonDemo1.java │ │ │ ├── collection │ │ │ ├── ExpandableListViewDemo1.java │ │ │ ├── GridViewDemo1.java │ │ │ ├── GridViewDemo2.java │ │ │ ├── ViewFlipperDemo1.java │ │ │ ├── ViewPagerDemo1.java │ │ │ ├── ViewPagerDemo2.java │ │ │ ├── ViewPagerDemo3.java │ │ │ ├── ViewPagerDemo3_Fragment.java │ │ │ ├── ViewPagerDemo4.java │ │ │ └── ViewPagerDemo4_Fragment.java │ │ │ ├── custom │ │ │ ├── CustomView1.java │ │ │ ├── CustomView1Demo.java │ │ │ ├── CustomView2.java │ │ │ ├── CustomView2Demo.java │ │ │ ├── CustomView3.java │ │ │ ├── CustomView3Demo.java │ │ │ ├── CustomView4.java │ │ │ ├── CustomView4Demo.java │ │ │ ├── MyLoading1.java │ │ │ └── MyLoadingDemo1.java │ │ │ ├── flyout │ │ │ ├── AlertDialogDemo1.java │ │ │ ├── AlertDialogDemo2.java │ │ │ ├── AlertDialogDemo3.java │ │ │ ├── AlertDialogDemo4.java │ │ │ ├── ContextMenuDemo1.java │ │ │ ├── ContextMenuDemo2.java │ │ │ ├── DatePickerDialogDemo1.java │ │ │ ├── PopupMenuDemo1.java │ │ │ ├── PopupMenuDemo2.java │ │ │ ├── PopupWindowDemo1.java │ │ │ ├── ProgressDialogDemo1.java │ │ │ └── TimePickerDialogDemo1.java │ │ │ ├── layout │ │ │ ├── ConstraintLayoutDemo1.java │ │ │ ├── ConstraintLayoutDemo2.java │ │ │ ├── ConstraintLayoutDemo3.java │ │ │ ├── ContentViewDemo1.java │ │ │ ├── FrameLayoutDemo1.java │ │ │ ├── GridLayoutDemo1.java │ │ │ ├── IncludeDemo1.java │ │ │ ├── InflateDemo1.java │ │ │ ├── LinearLayoutDemo1.java │ │ │ ├── RelativeLayoutDemo1.java │ │ │ ├── ScrollViewDemo1.java │ │ │ └── TableLayoutDemo1.java │ │ │ ├── listview │ │ │ ├── ListViewDemo1.java │ │ │ ├── ListViewDemo10.java │ │ │ ├── ListViewDemo2.java │ │ │ ├── ListViewDemo3.java │ │ │ ├── ListViewDemo4.java │ │ │ ├── ListViewDemo5.java │ │ │ ├── ListViewDemo6.java │ │ │ ├── ListViewDemo7.java │ │ │ ├── ListViewDemo8.java │ │ │ ├── ListViewDemo8LoadMoreListView.java │ │ │ └── ListViewDemo9.java │ │ │ ├── media │ │ │ ├── GlideDemo1.java │ │ │ ├── ImageViewDemo1.java │ │ │ ├── ImageViewDemo2.java │ │ │ ├── MediaPlayerDemo1.kt │ │ │ ├── MediaPlayerDemo2.kt │ │ │ ├── MediaPlayerDemo3.kt │ │ │ ├── NinePatchDemo1.java │ │ │ ├── PicassoDemo1.java │ │ │ └── ScreenshotDemo1.kt │ │ │ ├── navigation │ │ │ ├── DrawerLayoutDemo1.java │ │ │ ├── TabBarDemo1.java │ │ │ ├── TabBarDemo1_MyTabBar.java │ │ │ ├── ToolBarDemo1.java │ │ │ └── ToolBarDemo2.java │ │ │ ├── progress │ │ │ ├── ProgressBarDemo1.java │ │ │ ├── ProgressBarDemo2.java │ │ │ ├── RatingBarDemo1.java │ │ │ ├── RatingBarDemo2.java │ │ │ ├── SeekBarDemo1.java │ │ │ └── SeekBarDemo2.java │ │ │ ├── recyclerview │ │ │ ├── MyData.java │ │ │ ├── MyRecyclerViewAdapter.java │ │ │ ├── MyVerticalLinearLayoutManagerDivider.java │ │ │ ├── RecyclerViewDemo1.java │ │ │ ├── RecyclerViewDemo2.java │ │ │ ├── RecyclerViewDemo3.java │ │ │ ├── RecyclerViewDemo4.java │ │ │ ├── RecyclerViewDemo4Adapter.java │ │ │ └── RecyclerViewDemo4OnScrollListener.java │ │ │ ├── selection │ │ │ ├── CheckBoxDemo1.java │ │ │ ├── CheckBoxDemo2.java │ │ │ ├── NumberPickerCustom.java │ │ │ ├── NumberPickerDemo1.java │ │ │ ├── NumberPickerDemo2.java │ │ │ ├── RadioButtonDemo1.java │ │ │ ├── RadioButtonDemo2.java │ │ │ ├── SpinnerDemo1.java │ │ │ ├── SpinnerDemo2.java │ │ │ ├── SpinnerDemo3.java │ │ │ ├── SpinnerDemo4.java │ │ │ ├── SpinnerDemo5.java │ │ │ ├── SwitchDemo1.java │ │ │ ├── SwitchDemo2.java │ │ │ ├── ToggleButtonDemo1.java │ │ │ └── ToggleButtonDemo2.java │ │ │ ├── text │ │ │ ├── AutoCompleteTextViewDemo1.java │ │ │ ├── EditTextDemo1.java │ │ │ ├── EditTextDemo2.java │ │ │ ├── EditTextDemo3.java │ │ │ ├── MultiAutoCompleteTextViewDemo1.java │ │ │ ├── TextViewDemo1.java │ │ │ ├── TextViewDemo2.java │ │ │ ├── TextViewDemo3.java │ │ │ ├── TextViewDemo4.java │ │ │ ├── TextViewDemo5.java │ │ │ ├── TextViewDemo6.java │ │ │ ├── TextViewMarquee.java │ │ │ └── utils │ │ │ │ ├── HelloTagHandler.java │ │ │ │ ├── KeyboardHeightObserver.java │ │ │ │ ├── KeyboardHeightProvider.java │ │ │ │ ├── MyFontTagHandler.java │ │ │ │ ├── URLImageGetter.java │ │ │ │ └── URLImageGetterDrawable.java │ │ │ └── webview │ │ │ ├── WebViewDemo1.java │ │ │ ├── WebViewDemo2.java │ │ │ ├── WebViewDemo3.java │ │ │ ├── WebViewDemo4.java │ │ │ └── WebViewDemo5.java │ ├── jni │ │ ├── Android.mk │ │ ├── Application.mk │ │ ├── cHello.c │ │ └── cHello.h │ ├── jniLibs │ │ ├── arm64-v8a │ │ │ └── libjniHello.so │ │ ├── armeabi-v7a │ │ │ └── libjniHello.so │ │ ├── x86 │ │ │ └── libjniHello.so │ │ └── x86_64 │ │ │ └── libjniHello.so │ └── res │ │ ├── anim │ │ ├── accelerateinterpolator_animation_animationdemo2.xml │ │ ├── activity_fade_in.xml │ │ ├── activity_fade_out.xml │ │ ├── activity_flip_horizontal_in.xml │ │ ├── activity_flip_horizontal_out.xml │ │ ├── activity_push_left_in.xml │ │ ├── activity_push_left_out.xml │ │ ├── activity_zoom_enter.xml │ │ ├── activity_zoom_exit.xml │ │ ├── alertdialog_enter.xml │ │ ├── alertdialog_exit.xml │ │ ├── fragment_push_left_in.xml │ │ ├── fragment_push_left_out.xml │ │ ├── fragment_zoom_enter.xml │ │ ├── fragment_zoom_exit.xml │ │ ├── popupwindow_enter.xml │ │ ├── popupwindow_exit.xml │ │ ├── set_animation_animationdemo1.xml │ │ ├── translate_animationdemo2.xml │ │ ├── viewflipper_left_in.xml │ │ ├── viewflipper_left_out.xml │ │ ├── viewflipper_right_in.xml │ │ └── viewflipper_right_out.xml │ │ ├── animator │ │ ├── animator_animation_animationdemo5.xml │ │ └── set_animation_animationdemo6.xml │ │ ├── color │ │ └── selector_button_textcolor.xml │ │ ├── drawable-mdpi │ │ └── son02.jpg │ │ ├── drawable-xxhdpi │ │ ├── ic_expand_less.png │ │ ├── ic_expand_more.png │ │ ├── ic_ratingbar_background.png │ │ ├── ic_ratingbar_progress.png │ │ ├── ic_ratingbar_secondaryprogress.png │ │ ├── img_activity_lifecycle.jpg │ │ ├── img_dialog_ninepatch.9.png │ │ ├── img_dialog_original.png │ │ ├── img_fragment_lifecycle.png │ │ ├── img_sample_son.jpg │ │ ├── img_theme_explain.jpg │ │ ├── img_thread_state.png │ │ └── son01.jpg │ │ ├── drawable │ │ ├── animationlist_animationdemo4.xml │ │ ├── animationlist_progressbar_indeterminate.xml │ │ ├── ic_launcher_background.xml │ │ ├── layerlist_checkbox_button_checked.xml │ │ ├── layerlist_checkbox_button_unchecked.xml │ │ ├── layerlist_expand_group_collapsed.xml │ │ ├── layerlist_expand_group_expanded.xml │ │ ├── layerlist_progressbar_indeterminate.xml │ │ ├── layerlist_progressbar_progress.xml │ │ ├── layerlist_radiobutton_button_checked.xml │ │ ├── layerlist_radiobutton_button_unchecked.xml │ │ ├── layerlist_ratingbar_progress.xml │ │ ├── layerlist_seekbar_progress.xml │ │ ├── layerlist_splash_background.xml │ │ ├── layerlist_togglebutton_button_checked.xml │ │ ├── layerlist_togglebutton_button_unchecked.xml │ │ ├── rotate_progressbar_indeterminate.xml │ │ ├── selector_button_background.xml │ │ ├── selector_checkbox_button.xml │ │ ├── selector_expand_group.xml │ │ ├── selector_listview_item_background_normal.xml │ │ ├── selector_listview_item_background_selected.xml │ │ ├── selector_radiobutton_button.xml │ │ ├── selector_seekbar_thumb.xml │ │ ├── selector_spinner_background.xml │ │ ├── selector_switch_thumb.xml │ │ ├── selector_switch_track.xml │ │ ├── selector_togglebutton_button.xml │ │ ├── shape_button_background.xml │ │ ├── shape_edittext_bottom_line.xml │ │ ├── shape_edittext_cursor.xml │ │ ├── shape_linearlayout_divider_vertical.xml │ │ ├── shape_listview_divider.xml │ │ ├── shape_recyclerview_divider.xml │ │ ├── shape_sample_gradient_linear.xml │ │ ├── shape_sample_gradient_radial.xml │ │ ├── shape_sample_gradient_sweep.xml │ │ ├── shape_sample_line.xml │ │ ├── shape_sample_oval.xml │ │ ├── shape_sample_padding.xml │ │ ├── shape_sample_rectangle.xml │ │ ├── shape_sample_ring.xml │ │ ├── shape_sample_size.xml │ │ ├── shape_sample_solid_stroke_corners.xml │ │ ├── shape_seekbar_thumb_pressed.xml │ │ ├── shape_seekbar_thumb_unpressed.xml │ │ ├── shape_switch_thumb_pressed.xml │ │ ├── shape_switch_thumb_unpressed.xml │ │ ├── shape_switch_track_checked.xml │ │ ├── shape_switch_track_unchecked.xml │ │ └── shape_toast_background.xml │ │ ├── font │ │ └── myfont.ttf │ │ ├── layout │ │ ├── activity_activity_activitydemo1.xml │ │ ├── activity_activity_activitydemo1_2.xml │ │ ├── activity_activity_activitydemo2_landscape.xml │ │ ├── activity_activity_activitydemo2_portrait.xml │ │ ├── activity_activity_activitydemo3.xml │ │ ├── activity_activity_activitydemo3_2.xml │ │ ├── activity_activity_activitydemo4.xml │ │ ├── activity_activity_activitydemo4_2.xml │ │ ├── activity_activity_activitydemo4_3.xml │ │ ├── activity_activity_activitydemo5.xml │ │ ├── activity_activity_activitydemo5_2.xml │ │ ├── activity_activity_activitydemo5_3.xml │ │ ├── activity_activity_activitydemo6.xml │ │ ├── activity_activity_activitydemo6_2.xml │ │ ├── activity_animation_animationdemo1.xml │ │ ├── activity_animation_animationdemo2.xml │ │ ├── activity_animation_animationdemo3.xml │ │ ├── activity_animation_animationdemo4.xml │ │ ├── activity_animation_animationdemo5.xml │ │ ├── activity_animation_animationdemo6.xml │ │ ├── activity_animation_animationdemo7.xml │ │ ├── activity_animation_matrixdemo1.xml │ │ ├── activity_animation_matrixdemo2.xml │ │ ├── activity_async_asynctaskdemo1.xml │ │ ├── activity_async_futuretaskdemo1.xml │ │ ├── activity_async_futuretaskdemo2.xml │ │ ├── activity_async_handlerdemo1.xml │ │ ├── activity_async_handlerdemo2.xml │ │ ├── activity_async_handlerdemo3.xml │ │ ├── activity_async_threaddemo1.xml │ │ ├── activity_async_threaddemo2.xml │ │ ├── activity_async_threaddemo3.xml │ │ ├── activity_async_threaddemo4.xml │ │ ├── activity_async_threaddemo5.xml │ │ ├── activity_async_threaddemo6.xml │ │ ├── activity_async_threadlocaldemo1.xml │ │ ├── activity_async_threadpooldemo1.xml │ │ ├── activity_async_threadpooldemo2.xml │ │ ├── activity_async_timerdemo1.xml │ │ ├── activity_concurrent_atomicdemo1.xml │ │ ├── activity_concurrent_countdownlatchdemo1.xml │ │ ├── activity_concurrent_cyclicbarrierdemo1.xml │ │ ├── activity_concurrent_lockdemo1.xml │ │ ├── activity_concurrent_lockdemo2.xml │ │ ├── activity_concurrent_lockdemo3.xml │ │ ├── activity_concurrent_readwritelockdemo1.xml │ │ ├── activity_concurrent_reentrantlockdemo1.xml │ │ ├── activity_concurrent_reentrantreadwritelockdemo1.xml │ │ ├── activity_concurrent_semaphoredemo1.xml │ │ ├── activity_concurrent_synchronizeddemo1.xml │ │ ├── activity_concurrent_synchronizeddemo2.xml │ │ ├── activity_concurrent_volatiledemo1.xml │ │ ├── activity_designpattern_singleton.xml │ │ ├── activity_fragment_fragmentdemo1.xml │ │ ├── activity_fragment_fragmentdemo1_2.xml │ │ ├── activity_fragment_fragmentdemo2.xml │ │ ├── activity_fragment_fragmentdemo3.xml │ │ ├── activity_fragment_fragmentdemo4.xml │ │ ├── activity_input_gesturedemo1.xml │ │ ├── activity_input_gesturedemo2.xml │ │ ├── activity_input_gesturedemo3.xml │ │ ├── activity_input_keydemo1.xml │ │ ├── activity_input_touchdemo1.xml │ │ ├── activity_input_touchdemo2.xml │ │ ├── activity_input_touchdemo3.xml │ │ ├── activity_input_touchdemo4.xml │ │ ├── activity_input_touchdemo5.xml │ │ ├── activity_ipc_broadcastdemo1.xml │ │ ├── activity_ipc_broadcastdemo2.xml │ │ ├── activity_ipc_broadcastdemo3.xml │ │ ├── activity_ipc_clipboarddemo1.xml │ │ ├── activity_ipc_contentproviderdemo1.xml │ │ ├── activity_ipc_packagedemo1.xml │ │ ├── activity_ipc_sharesourcedemo1.xml │ │ ├── activity_ipc_urlschemedemo1.xml │ │ ├── activity_java_bitdemo1.xml │ │ ├── activity_java_callbackdemo1.xml │ │ ├── activity_jetpack_lifecycle_databindingdemo.xml │ │ ├── activity_jetpack_lifecycle_lifecycledemo.xml │ │ ├── activity_jetpack_lifecycle_livedatademo.xml │ │ ├── activity_jetpack_lifecycle_livedatademo2.xml │ │ ├── activity_jetpack_lifecycle_viewmodeldemo.xml │ │ ├── activity_kotlin_coroutine_demo1.xml │ │ ├── activity_kotlin_coroutine_demo2.xml │ │ ├── activity_kotlin_coroutine_demo3.xml │ │ ├── activity_kotlin_coroutine_demo4.xml │ │ ├── activity_kotlin_coroutine_demo5.xml │ │ ├── activity_kotlin_coroutine_demo6.xml │ │ ├── activity_kotlin_coroutine_demo7.xml │ │ ├── activity_kotlin_demo1.xml │ │ ├── activity_kotlin_demo10.xml │ │ ├── activity_kotlin_demo11.xml │ │ ├── activity_kotlin_demo12.xml │ │ ├── activity_kotlin_demo2.xml │ │ ├── activity_kotlin_demo3.xml │ │ ├── activity_kotlin_demo4.xml │ │ ├── activity_kotlin_demo5.xml │ │ ├── activity_kotlin_demo6.xml │ │ ├── activity_kotlin_demo7.xml │ │ ├── activity_kotlin_demo8.xml │ │ ├── activity_kotlin_demo9.xml │ │ ├── activity_kotlin_helloworld.xml │ │ ├── activity_main.xml │ │ ├── activity_ndk_ndkdemo1.xml │ │ ├── activity_notification_notificationdemo1.xml │ │ ├── activity_notification_notificationdemo1click.xml │ │ ├── activity_notification_notificationdemo2.xml │ │ ├── activity_notification_toastdemo1.xml │ │ ├── activity_notification_toastdemo1_customtoast.xml │ │ ├── activity_optimize_demo1.xml │ │ ├── activity_optimize_demo2.xml │ │ ├── activity_optimize_demo3.xml │ │ ├── activity_optimize_demo4.xml │ │ ├── activity_resource_localizationdemo1.xml │ │ ├── activity_resource_metadatademo1.xml │ │ ├── activity_resource_xmldemo1.xml │ │ ├── activity_service_downloadmanagerdemo1.xml │ │ ├── activity_service_servicedemo1.xml │ │ ├── activity_service_workermanagerdemo1.xml │ │ ├── activity_storage_android11demo1.xml │ │ ├── activity_storage_android11demo2.xml │ │ ├── activity_storage_android11demo3.xml │ │ ├── activity_storage_sharedpreferencesdemo1.xml │ │ ├── activity_storage_sqlitedemo1.xml │ │ ├── activity_storage_storagedemo1.xml │ │ ├── activity_storage_storagedemo2.xml │ │ ├── activity_storage_storagedemo3.xml │ │ ├── activity_tools_generatehtmlindex.xml │ │ ├── activity_tools_generatereadme.xml │ │ ├── activity_ui_colordemo1.xml │ │ ├── activity_ui_configurationchangedemo1.xml │ │ ├── activity_ui_densitydemo1.xml │ │ ├── activity_ui_icondemo1.xml │ │ ├── activity_ui_immersivedemo1.xml │ │ ├── activity_ui_immersivedemo2.xml │ │ ├── activity_ui_navigationbardemo1.xml │ │ ├── activity_ui_shapedemo1.xml │ │ ├── activity_ui_shapedemo2.xml │ │ ├── activity_ui_shapedemo3.xml │ │ ├── activity_ui_statusbardemo1.xml │ │ ├── activity_ui_styledemo1.xml │ │ ├── activity_ui_themedemo1.xml │ │ ├── activity_ui_themedemo2.xml │ │ ├── activity_ui_themedemo3.xml │ │ ├── activity_utils_demo1.xml │ │ ├── activity_utils_demo2.xml │ │ ├── activity_utils_demo3.xml │ │ ├── activity_view_button_buttondemo1.xml │ │ ├── activity_view_button_buttondemo2.xml │ │ ├── activity_view_button_imagebuttondemo1.xml │ │ ├── activity_view_collection_expandablelistviewdemo1.xml │ │ ├── activity_view_collection_gridviewdemo1.xml │ │ ├── activity_view_collection_gridviewdemo2.xml │ │ ├── activity_view_collection_viewflipperdemo1.xml │ │ ├── activity_view_collection_viewpagerdemo1.xml │ │ ├── activity_view_collection_viewpagerdemo1_page1.xml │ │ ├── activity_view_collection_viewpagerdemo1_page2.xml │ │ ├── activity_view_collection_viewpagerdemo1_page3.xml │ │ ├── activity_view_collection_viewpagerdemo2.xml │ │ ├── activity_view_collection_viewpagerdemo2_page1.xml │ │ ├── activity_view_collection_viewpagerdemo2_page2.xml │ │ ├── activity_view_collection_viewpagerdemo2_page3.xml │ │ ├── activity_view_collection_viewpagerdemo3.xml │ │ ├── activity_view_collection_viewpagerdemo4.xml │ │ ├── activity_view_custom_customview1demo.xml │ │ ├── activity_view_custom_customview2demo.xml │ │ ├── activity_view_custom_customview3demo.xml │ │ ├── activity_view_custom_customview4demo.xml │ │ ├── activity_view_custom_myloadingdemo1.xml │ │ ├── activity_view_flyout_alertdialogdemo1.xml │ │ ├── activity_view_flyout_alertdialogdemo2.xml │ │ ├── activity_view_flyout_alertdialogdemo3.xml │ │ ├── activity_view_flyout_alertdialogdemo4.xml │ │ ├── activity_view_flyout_contextmenudemo1.xml │ │ ├── activity_view_flyout_contextmenudemo2.xml │ │ ├── activity_view_flyout_datepickerdialogdemo1.xml │ │ ├── activity_view_flyout_popupmenudemo1.xml │ │ ├── activity_view_flyout_popupmenudemo2.xml │ │ ├── activity_view_flyout_popupwindowdemo1.xml │ │ ├── activity_view_flyout_progressdialogdemo1.xml │ │ ├── activity_view_flyout_timepickerdialogdemo1.xml │ │ ├── activity_view_layout_constraintlayoutdemo1.xml │ │ ├── activity_view_layout_constraintlayoutdemo2.xml │ │ ├── activity_view_layout_constraintlayoutdemo3.xml │ │ ├── activity_view_layout_framelayoutdemo1.xml │ │ ├── activity_view_layout_gridlayoutdemo1.xml │ │ ├── activity_view_layout_includedemo1.xml │ │ ├── activity_view_layout_inflatedemo1.xml │ │ ├── activity_view_layout_linearlayoutdemo1.xml │ │ ├── activity_view_layout_relativelayoutdemo1.xml │ │ ├── activity_view_layout_scrollviewdemo1.xml │ │ ├── activity_view_layout_tablelayoutdemo1.xml │ │ ├── activity_view_listview_listviewdemo1.xml │ │ ├── activity_view_listview_listviewdemo10.xml │ │ ├── activity_view_listview_listviewdemo2.xml │ │ ├── activity_view_listview_listviewdemo3.xml │ │ ├── activity_view_listview_listviewdemo4.xml │ │ ├── activity_view_listview_listviewdemo5.xml │ │ ├── activity_view_listview_listviewdemo6.xml │ │ ├── activity_view_listview_listviewdemo7.xml │ │ ├── activity_view_listview_listviewdemo8.xml │ │ ├── activity_view_listview_listviewdemo9.xml │ │ ├── activity_view_media_glidedemo1.xml │ │ ├── activity_view_media_imageviewdemo1.xml │ │ ├── activity_view_media_imageviewdemo2.xml │ │ ├── activity_view_media_mediaplayerdemo1.xml │ │ ├── activity_view_media_mediaplayerdemo2.xml │ │ ├── activity_view_media_mediaplayerdemo3.xml │ │ ├── activity_view_media_ninepatchdemo1.xml │ │ ├── activity_view_media_picassodemo1.xml │ │ ├── activity_view_media_screenshotdemo1.xml │ │ ├── activity_view_navigation_drawerlayoutdemo1.xml │ │ ├── activity_view_navigation_tabbardemo1.xml │ │ ├── activity_view_navigation_toolbardemo1.xml │ │ ├── activity_view_navigation_toolbardemo2.xml │ │ ├── activity_view_progress_progressbardemo1.xml │ │ ├── activity_view_progress_progressbardemo2.xml │ │ ├── activity_view_progress_ratingbardemo1.xml │ │ ├── activity_view_progress_ratingbardemo2.xml │ │ ├── activity_view_progress_seekbardemo1.xml │ │ ├── activity_view_progress_seekbardemo2.xml │ │ ├── activity_view_recyclerview_recyclerviewdemo1.xml │ │ ├── activity_view_recyclerview_recyclerviewdemo2.xml │ │ ├── activity_view_recyclerview_recyclerviewdemo3.xml │ │ ├── activity_view_recyclerview_recyclerviewdemo4.xml │ │ ├── activity_view_selection_checkboxdemo1.xml │ │ ├── activity_view_selection_checkboxdemo2.xml │ │ ├── activity_view_selection_numberpickerdemo1.xml │ │ ├── activity_view_selection_numberpickerdemo2.xml │ │ ├── activity_view_selection_radiobuttondemo1.xml │ │ ├── activity_view_selection_radiobuttondemo2.xml │ │ ├── activity_view_selection_spinnerdemo1.xml │ │ ├── activity_view_selection_spinnerdemo2.xml │ │ ├── activity_view_selection_spinnerdemo3.xml │ │ ├── activity_view_selection_spinnerdemo4.xml │ │ ├── activity_view_selection_spinnerdemo5.xml │ │ ├── activity_view_selection_switchdemo1.xml │ │ ├── activity_view_selection_switchdemo2.xml │ │ ├── activity_view_selection_togglebuttondemo1.xml │ │ ├── activity_view_selection_togglebuttondemo2.xml │ │ ├── activity_view_text_autocompletetextviewdemo1.xml │ │ ├── activity_view_text_edittextdemo1.xml │ │ ├── activity_view_text_edittextdemo2.xml │ │ ├── activity_view_text_edittextdemo3.xml │ │ ├── activity_view_text_multiautocompletetextviewdemo1.xml │ │ ├── activity_view_text_textviewdemo1.xml │ │ ├── activity_view_text_textviewdemo2.xml │ │ ├── activity_view_text_textviewdemo3.xml │ │ ├── activity_view_text_textviewdemo4.xml │ │ ├── activity_view_text_textviewdemo5.xml │ │ ├── activity_view_text_textviewdemo6.xml │ │ ├── activity_view_viewdemo1.xml │ │ ├── activity_view_viewdemo2.xml │ │ ├── activity_view_viewdemo3.xml │ │ ├── activity_view_webview_webviewdemo1.xml │ │ ├── activity_view_webview_webviewdemo2.xml │ │ ├── activity_view_webview_webviewdemo3.xml │ │ ├── activity_view_webview_webviewdemo4.xml │ │ ├── activity_view_webview_webviewdemo5.xml │ │ ├── alertdialog_view_flyout_alertdialogdemo2.xml │ │ ├── customview_view_custom_customview3.xml │ │ ├── fragment_fragment_fragment1_1.xml │ │ ├── fragment_fragment_fragment2_1.xml │ │ ├── fragment_fragment_fragment2_2.xml │ │ ├── fragment_fragment_fragment3_1.xml │ │ ├── fragment_fragment_fragment4_1.xml │ │ ├── fragment_view_collection_viewpagerdemo3.xml │ │ ├── fragment_view_collection_viewpagerdemo4.xml │ │ ├── item_expand_child.xml │ │ ├── item_expand_group.xml │ │ ├── item_view_collection_gridviewdemo1.xml │ │ ├── item_view_collection_gridviewdemo2.xml │ │ ├── item_view_listview_listviewdemo1.xml │ │ ├── item_view_listview_listviewdemo10.xml │ │ ├── item_view_listview_listviewdemo2.xml │ │ ├── item_view_listview_listviewdemo3.xml │ │ ├── item_view_listview_listviewdemo4.xml │ │ ├── item_view_listview_listviewdemo5.xml │ │ ├── item_view_listview_listviewdemo6.xml │ │ ├── item_view_listview_listviewdemo6_footer.xml │ │ ├── item_view_listview_listviewdemo6_header.xml │ │ ├── item_view_listview_listviewdemo7_1.xml │ │ ├── item_view_listview_listviewdemo7_2.xml │ │ ├── item_view_listview_listviewdemo8.xml │ │ ├── item_view_listview_listviewdemo8_loadmore.xml │ │ ├── item_view_recyclerview_myrecyclerviewadapter_1.xml │ │ ├── item_view_recyclerview_myrecyclerviewadapter_2.xml │ │ ├── item_view_recyclerview_recyclerviewdemo8_loadmore.xml │ │ ├── item_view_selection_spinnerdemo3.xml │ │ ├── item_view_selection_spinnerdemo4.xml │ │ ├── item_view_selection_spinnerdemo5.xml │ │ ├── item_view_text_autocompletetextviewdemo1.xml │ │ ├── item_view_text_multiautocompletetextviewdemo1.xml │ │ ├── popupwindow_measure_softinput.xml │ │ ├── popupwindow_view_layout_popupwindowdemo1.xml │ │ ├── remoteviews_big_notification_notificationdemo2.xml │ │ ├── remoteviews_notification_notificationdemo2.xml │ │ ├── view_view_layout_includedemo1.xml │ │ └── view_view_layout_inflatedemo1.xml │ │ ├── menu │ │ ├── menu_view_flyout_contextmenudemo1.xml │ │ ├── menu_view_flyout_contextmenudemo2.xml │ │ ├── menu_view_flyout_popupmenudemo1.xml │ │ ├── menu_view_flyout_popupmenudemo2.xml │ │ ├── menu_view_navigation_toolbardemo1.xml │ │ └── menu_view_navigation_toolbardemo2.xml │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_alpha.png │ │ └── ic_launcher_round.png │ │ ├── raw │ │ ├── notification.mp3 │ │ └── text_storage_storagedemo3.txt │ │ ├── values-en │ │ └── strings.xml │ │ ├── values-zh │ │ └── strings.xml │ │ ├── values │ │ ├── arrays.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ └── network_security_config.xml │ └── test │ └── java │ └── com │ └── webabcd │ └── androiddemo │ └── ExampleUnitTest.java ├── build.gradle ├── 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 | .cxx 15 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/deploymentTargetDropDown.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /src/main/obj -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /app/src/androidTest/java/com/webabcd/androiddemo/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.webabcd.androiddemo; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.webabcd.androiddemo", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml.readme: -------------------------------------------------------------------------------- 1 | 关于 application 节点的几个属性的说明 2 | 1、extractNativeLibs="true" 会通过 zip 压缩 so,否则不压缩 so 3 | minSdkVersion >= 23 且 Android Gradle plugin >= 3.6.0 时,extractNativeLibs 默认值为 false,否则其默认值为 true 4 | 2、networkSecurityConfig="@xml/network_security_config"(在 android 9.0 或以上系统请求 http 资源,需要配置这个) 5 | 6 | 关于 activity 节点的几个属性的说明 7 | 1、android:exported="true" 的意思是此 activity 允许被其他程序启动 -------------------------------------------------------------------------------- /app/src/main/assets/ad.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/assets/ad.mp4 -------------------------------------------------------------------------------- /app/src/main/assets/son.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/assets/son.jpg -------------------------------------------------------------------------------- /app/src/main/assets/text_storage_storagedemo3.txt: -------------------------------------------------------------------------------- 1 | i am from assets -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/OnGroupExpandedListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 本程序首页的 ExpandableListView 分组展开监听器 3 | */ 4 | 5 | package com.webabcd.androiddemo; 6 | 7 | public interface OnGroupExpandedListener { 8 | /** 9 | * 分组展开 10 | * 11 | * @param groupPosition 分组的位置 12 | */ 13 | void onGroupExpanded(int groupPosition); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/animation/AnimationDemo3CustomInterpolator.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 自定义 Interpolator 实现一个先慢后快的效果 3 | * 4 | * Interpolator 用于计算不同时间点的动画结果的比例值 5 | */ 6 | 7 | package com.webabcd.androiddemo.animation; 8 | 9 | import android.view.animation.BaseInterpolator; 10 | 11 | // 继承 BaseInterpolator 实现一个自定义的 Interpolator 12 | public class AnimationDemo3CustomInterpolator extends BaseInterpolator { 13 | 14 | private float mPow; 15 | 16 | /** 17 | * @param pow 值越大,先慢后快的效果越明显 18 | */ 19 | public AnimationDemo3CustomInterpolator(float pow) { 20 | mPow = pow; 21 | } 22 | 23 | // 传入一个动画的时间点值(0 - 1 之间,0 对应动画开始的时间点,1 对应动画结束的时间点),返回插值结果(允许不在 0 - 1 之间) 24 | // 这个插值结果就是指定时间点的动画结果的比例值,这个比例值乘以(目标位置 - 初始位置)就是动画当前时间点的相对于初始位置的位置 25 | @Override 26 | public float getInterpolation(float input) { 27 | return (float) Math.pow(input, mPow); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/animation/AnimationDemo5CustomTypeEvaluator.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 自定义 TypeEvaluator 3 | * 4 | * 本例用于根据从 TimeInterpolator 获取到的比例值,计算出 Point 的值 5 | */ 6 | 7 | package com.webabcd.androiddemo.animation; 8 | 9 | import android.animation.TypeEvaluator; 10 | import android.graphics.Point; 11 | 12 | public class AnimationDemo5CustomTypeEvaluator implements TypeEvaluator { 13 | 14 | @Override 15 | public Object evaluate(float fraction, Object startValue, Object endValue) { 16 | // startValue - Point 的开始值 17 | // endValue - Point 的结束值 18 | Point startPoint = (Point) startValue; 19 | Point endPoint = (Point) endValue; 20 | 21 | // fraction 是通过 TimeInterpolator 计算出的比例值,需要根据此值以及 startValue 和 endValue 计算出 fraction 对应的 Point 值 22 | float x = startPoint.x + (endPoint.x - startPoint.x) * fraction; 23 | float y = startPoint.y + (endPoint.y - startPoint.y) * fraction; 24 | 25 | return new Point((int)x, (int)y); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/animation/MatrixDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Matrix 变换(通过自定义控件实现) 3 | * 4 | * ImageView 有设置其 Matrix 变换的方法(需要将其 scaleType 设置为 matrix),但是其他控件都没有,那么如何设置其他控件的 Matrix 变换呢 5 | * 本例演示如何重写 TextView 控件的 onDraw() 方法,以使其支持 Matrix 变换(详细代码参见:animation/MatrixDemo2CustomView.java) 6 | * 7 | * 注:对于非 ImageView 控件的 Matrix 变换来说,除了用本例的方法外,也可以用其他方法实现。比如调用控件的 setTranslationX(), setScaleX() 之类的方法,或者用 0 秒动画 8 | */ 9 | 10 | package com.webabcd.androiddemo.animation; 11 | 12 | import androidx.appcompat.app.AppCompatActivity; 13 | import android.os.Bundle; 14 | 15 | import com.webabcd.androiddemo.R; 16 | 17 | public class MatrixDemo2 extends AppCompatActivity { 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.activity_animation_matrixdemo2); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/designpattern/SingletonPattern.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 单例模式 3 | */ 4 | 5 | package com.webabcd.androiddemo.designpattern; 6 | 7 | import android.os.SystemClock; 8 | 9 | public class SingletonPattern { 10 | private static SingletonPattern instance = null; 11 | 12 | public synchronized static SingletonPattern getInstance() { 13 | if (instance == null) { 14 | instance = new SingletonPattern(); 15 | } 16 | return instance; 17 | } 18 | 19 | private final long mTimestamp; 20 | 21 | private SingletonPattern() { 22 | mTimestamp = SystemClock.elapsedRealtime(); 23 | } 24 | 25 | public long getTimestamp() { 26 | return mTimestamp; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/fragment/Fragment4_1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Fragment4_1,由 FragmentDemo4 动态加载,用于演示 Fragment 动画 3 | */ 4 | 5 | package com.webabcd.androiddemo.fragment; 6 | 7 | import android.graphics.Color; 8 | import android.os.Bundle; 9 | import androidx.fragment.app.Fragment; 10 | import android.view.LayoutInflater; 11 | import android.view.View; 12 | import android.view.ViewGroup; 13 | 14 | import com.webabcd.androiddemo.R; 15 | 16 | import java.util.Random; 17 | 18 | public class Fragment4_1 extends Fragment { 19 | 20 | @Override 21 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 22 | View view = inflater.inflate(R.layout.fragment_fragment_fragment4_1, container, false); 23 | 24 | Random random = new Random(); 25 | view.setBackgroundColor(Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256))); 26 | 27 | return view; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/fragment/FragmentDemo1_2.java: -------------------------------------------------------------------------------- 1 | package com.webabcd.androiddemo.fragment; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.widget.Button; 7 | 8 | import com.webabcd.androiddemo.R; 9 | 10 | public class FragmentDemo1_2 extends AppCompatActivity { 11 | 12 | private Button mButton1; 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_fragment_fragmentdemo1_2); 18 | 19 | mButton1 = findViewById(R.id.button1); 20 | mButton1.setOnClickListener(new View.OnClickListener() { 21 | @Override 22 | public void onClick(View v) { 23 | finish(); 24 | } 25 | }); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/java/CallbackDemo1_CallbackClass.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 本例用于演示如何实现支持回调的类 3 | * 4 | * 定义回调接口参见:CallbackDemo1_CallbackInterface.java 5 | * 使用支持回调的类参见:CallbackDemo1.java 6 | */ 7 | 8 | package com.webabcd.androiddemo.java; 9 | 10 | import java.util.Date; 11 | 12 | public class CallbackDemo1_CallbackClass { 13 | 14 | private CallbackDemo1_CallbackInterface _callback; 15 | 16 | public CallbackDemo1_CallbackClass(CallbackDemo1_CallbackInterface callBack){ 17 | this._callback = callBack; 18 | } 19 | 20 | public void execute() { 21 | if (_callback != null) { 22 | if (new Date().getTime() % 2 == 0) { 23 | _callback.ok(); 24 | } else { 25 | _callback.error("错误信息"); 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/java/CallbackDemo1_CallbackInterface.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 本例用于演示如何定义回调接口 3 | * 4 | * 实现支持回调的类参见:CallbackDemo1_CallbackClass.java 5 | * 使用支持回调的类参见:CallbackDemo1.java 6 | */ 7 | 8 | package com.webabcd.androiddemo.java; 9 | 10 | public interface CallbackDemo1_CallbackInterface { 11 | void ok(); 12 | void error(String errMsg); 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo8_Abstract.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 抽象类(用于演示抽象类) 3 | */ 4 | 5 | package com.webabcd.androiddemo.kotlin 6 | 7 | abstract class Demo8_Abstract { 8 | 9 | // 需要子类重写的属性 10 | abstract var name:String 11 | 12 | // 需要子类重写的属性 13 | abstract var country:String 14 | 15 | // 需要子类重写的方法 16 | abstract fun getAge(): Int 17 | 18 | // 有自己逻辑的方法,不需要子类重写 19 | fun hello(): String { 20 | return "hello:$name, age:${getAge()}, country:$country" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo8_Class1.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 父类(用于演示类继承) 3 | * 4 | * 可被继承的类要用 open 修饰(默认是 final 的,即不可继承) 5 | * 可被重写的属性或方法要用 open 修饰(默认是 final 的,即不可重写) 6 | */ 7 | 8 | package com.webabcd.androiddemo.kotlin 9 | 10 | open class Demo8_Class1(var age: Int) { 11 | 12 | init { 13 | this.age = age 14 | } 15 | 16 | open var name = "wanglei" 17 | 18 | open var country = "china" 19 | 20 | open fun hello(): String { 21 | return "hello:$name, age:$age, country:$country" 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo8_Class3.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 实现类(用于演示接口) 3 | * 4 | * 接口的方法可以有自己的实现,但是属性不可以有自己的实现(需要子类实现) 5 | */ 6 | 7 | package com.webabcd.androiddemo.kotlin 8 | 9 | // 通过 : 实现多个接口 10 | // 通过类似如下 override var age: Int 的方式实现接口的属性 11 | class Demo8_Class3(override var age: Int) : Demo8_Interface1, Demo8_Interface2 { 12 | 13 | init { 14 | this.age = age; 15 | } 16 | 17 | // 实现接口的属性 18 | override var name: String = "" 19 | get() = "wanglei" 20 | 21 | // 实现接口的方法 22 | override fun hello(): String { 23 | 24 | // 通过 super 调用接口的方法 25 | // super.hello() 26 | 27 | // 如果实现的多个接口有重名的方法,则可以用如下方式调用不同接口的方法 28 | return super.hello() + " " + super.hello() 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo8_Class4.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 子类(用于演示抽象类) 3 | */ 4 | 5 | package com.webabcd.androiddemo.kotlin 6 | 7 | // 通过 : 继承抽象类 8 | // 通过类似如下 override var name: String 的方式重写抽象类的抽象属性 9 | class Demo8_Class4(override var name: String) : Demo8_Abstract() { 10 | 11 | init { 12 | this.name = name 13 | } 14 | 15 | // 重写抽象类的抽象属性 16 | override var country = "china" 17 | 18 | // 重写抽象类的抽象方法 19 | override fun getAge(): Int { 20 | return 100; 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo8_Interface1.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 接口 1(用于演示接口) 3 | * 4 | * 接口的方法可以有自己的实现,但是属性不可以有自己的实现(需要子类实现) 5 | */ 6 | 7 | package com.webabcd.androiddemo.kotlin 8 | 9 | interface Demo8_Interface1 { 10 | 11 | var name: String 12 | 13 | var age: Int 14 | 15 | fun hello(): String { 16 | return "hello:$name, age:$age" 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo8_Interface2.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 接口 2(用于演示接口) 3 | * 4 | * 接口的方法可以有自己的实现,但是属性不可以有自己的实现(需要子类实现) 5 | */ 6 | 7 | package com.webabcd.androiddemo.kotlin 8 | 9 | interface Demo8_Interface2 { 10 | 11 | var name: String 12 | 13 | var age: Int 14 | 15 | fun hello(): String { 16 | return "hi:$name, age:$age" 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo9_DataClass.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 数据类的示例 3 | */ 4 | 5 | package com.webabcd.androiddemo.kotlin 6 | 7 | // 用 data 修饰的类就是数据类 8 | // 主构造函数中的参数,可以直接用 var 或 val 声明,其会自动生成 public 的同名属性 9 | // 主构造函数中声明的属性会支持数据类的特性,比如解构, toString(), copy(), equals(), componentN() 等 10 | data class Demo9_DataClass(var name: String, val age: Int) { 11 | // 这里声明的属性不支持数据类的特性 12 | var salary = 1000 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo9_Enum.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 枚举的示例 3 | */ 4 | 5 | package com.webabcd.androiddemo.kotlin 6 | 7 | enum class Demo9_Enum1 { 8 | // 枚举常量 9 | OK, 10 | ERROR 11 | } 12 | 13 | // 带构造函数的枚举 14 | enum class Demo9_Enum2 (var status: Int) { 15 | // 枚举常量(使用枚举构造函数) 16 | OK(100), 17 | ERROR(200); // 这里要有分号,用于分隔枚举常量和方法 18 | 19 | // 枚举中的方法 20 | fun getMessage() = "message:$status" 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/Demo9_SealedClass.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * 密封类的示例 3 | */ 4 | 5 | package com.webabcd.androiddemo.kotlin 6 | 7 | // 用 sealed 修饰的类就是密封类 8 | // 密封类不能实例化 9 | sealed class Demo9_SealedClass { 10 | class OK : Demo9_SealedClass() 11 | class ERROR : Demo9_SealedClass() 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/HelloWorld_Java.java: -------------------------------------------------------------------------------- 1 | package com.webabcd.androiddemo.kotlin; 2 | 3 | public class HelloWorld_Java { 4 | 5 | public String hello(String message) { 6 | return "hello: " + message; 7 | } 8 | 9 | // java 调用 kotlin 的示例 10 | public String javaToKotlin() { 11 | HelloWorld_Kotlin x = new HelloWorld_Kotlin(); 12 | return x.hello("java 调用 kotlin"); 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/kotlin/HelloWorld_Kotlin.kt: -------------------------------------------------------------------------------- 1 | package com.webabcd.androiddemo.kotlin 2 | 3 | class HelloWorld_Kotlin { 4 | 5 | fun hello(message: String): String { 6 | return "hello: $message" 7 | } 8 | 9 | // kotlin 调用 java 的示例 10 | fun kotlinToJava(): String { 11 | var x = HelloWorld_Java() 12 | return x.hello("kotlin 调用 java") 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/resource/Temp.java: -------------------------------------------------------------------------------- 1 | package com.webabcd.androiddemo.resource; 2 | 3 | // 限定符说明要写,看自己的待写笔记 4 | // 5 | 6 | public class Temp { 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/resource/XmlDemo1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 布局 xml 基础 3 | */ 4 | 5 | package com.webabcd.androiddemo.resource; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import androidx.core.content.ContextCompat; 9 | 10 | import android.os.Bundle; 11 | import android.widget.TextView; 12 | 13 | import com.webabcd.androiddemo.R; 14 | 15 | public class XmlDemo1 extends AppCompatActivity { 16 | 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_resource_xmldemo1); 21 | 22 | // 如果 xml 中的控件有重名,则通过 findViewById() 找到的是 xml 中最先出现的控件 23 | TextView xmldemo1_textView2 = findViewById(R.id.xmldemo1_textView2); 24 | xmldemo1_textView2.setBackgroundColor(ContextCompat.getColor(this, R.color.orange)); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/ui/IconDemo1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 在 AndroidManifest.xml 中通过如下方式指定普通图标和圆形图标 3 | * 4 | * 5 | * 关于屏幕密度的说明请参见 /ui/DensityDemo1.java 6 | */ 7 | 8 | package com.webabcd.androiddemo.ui; 9 | 10 | import androidx.appcompat.app.AppCompatActivity; 11 | 12 | import android.os.Bundle; 13 | 14 | import com.webabcd.androiddemo.R; 15 | 16 | public class IconDemo1 extends AppCompatActivity { 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_ui_icondemo1); 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/ui/ShapeDemo1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * shape 渐变色(线性渐变,放射性渐变,扫描式渐变) 3 | * 4 | * 扫描式渐变的意思就是转着圈渐变 5 | */ 6 | 7 | package com.webabcd.androiddemo.ui; 8 | 9 | import androidx.appcompat.app.AppCompatActivity; 10 | import android.os.Bundle; 11 | 12 | import com.webabcd.androiddemo.R; 13 | 14 | public class ShapeDemo1 extends AppCompatActivity { 15 | 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_ui_shapedemo1); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/ui/ShapeDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * shape 之填充,描边,圆角,尺寸,内部间距 3 | */ 4 | 5 | package com.webabcd.androiddemo.ui; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class ShapeDemo2 extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_ui_shapedemo2); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/ui/ShapeDemo3.java: -------------------------------------------------------------------------------- 1 | /** 2 | * shape 形状(矩形,圆形,环形,直线) 3 | */ 4 | 5 | package com.webabcd.androiddemo.ui; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class ShapeDemo3 extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_ui_shapedemo3); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/ui/ThemeDemo3.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 通过主题修改控件的默认样式 3 | */ 4 | 5 | package com.webabcd.androiddemo.ui; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class ThemeDemo3 extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | 18 | // 指定 activity 的主题(需要在 setContentView() 之前) 19 | setTheme(R.style.ThemeDemo3Theme); 20 | 21 | setContentView(R.layout.activity_ui_themedemo3); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/collection/ExpandableListViewDemo1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * ExpandableListView - 可展开的 ListView 3 | * 4 | * ExpandableListView 的 Adapter 可以用 BaseExpandableListAdapter(最常用的), SimpleExpandableListAdapter, SimpleCursorTreeAdapter 5 | * 关于 ExpandableListView 的知识点,请参见本程序的 MainActivity 中的代码 6 | */ 7 | 8 | package com.webabcd.androiddemo.view.collection; 9 | 10 | import androidx.appcompat.app.AppCompatActivity; 11 | import android.os.Bundle; 12 | 13 | import com.webabcd.androiddemo.R; 14 | 15 | public class ExpandableListViewDemo1 extends AppCompatActivity { 16 | 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_view_collection_expandablelistviewdemo1); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/custom/CustomView1Demo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 参见 view/custom/CustomView1.java 3 | * 通过一个自定义 View 来演示 measure, layout, draw 4 | */ 5 | 6 | package com.webabcd.androiddemo.view.custom; 7 | 8 | import androidx.appcompat.app.AppCompatActivity; 9 | import android.os.Bundle; 10 | 11 | import com.webabcd.androiddemo.R; 12 | 13 | public class CustomView1Demo extends AppCompatActivity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_view_custom_customview1demo); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/custom/CustomView2Demo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 参见 view/custom/CustomView2.java 3 | * 通过一个自定义 ViewGroup 来演示 measure, layout, draw 4 | */ 5 | 6 | package com.webabcd.androiddemo.view.custom; 7 | 8 | import androidx.appcompat.app.AppCompatActivity; 9 | import android.os.Bundle; 10 | 11 | import com.webabcd.androiddemo.R; 12 | 13 | public class CustomView2Demo extends AppCompatActivity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_view_custom_customview2demo); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/custom/CustomView4Demo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 演示自定义控件的自定义属性的使用,自定义控件的实现代码参见 view/custom/CustomView4.java 3 | */ 4 | 5 | package com.webabcd.androiddemo.view.custom; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class CustomView4Demo extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_view_custom_customview4demo); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/media/ImageViewDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * ImageView - 图片控件 3 | * 4 | * 本例用于演示 ImageView 的 scaleType 5 | * 6 | * 注:关于网络图片的显示和缓存,以及图片的处理之类的建议使用 Picasso 框架 7 | */ 8 | 9 | package com.webabcd.androiddemo.view.media; 10 | 11 | import androidx.appcompat.app.AppCompatActivity; 12 | import android.os.Bundle; 13 | 14 | import com.webabcd.androiddemo.R; 15 | 16 | public class ImageViewDemo2 extends AppCompatActivity { 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_view_media_imageviewdemo2); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/media/NinePatchDemo1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 9patch(nine patch)图片 3 | */ 4 | 5 | package com.webabcd.androiddemo.view.media; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class NinePatchDemo1 extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_view_media_ninepatchdemo1); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/progress/ProgressBarDemo1.java: -------------------------------------------------------------------------------- 1 | /** 2 | * ProgressBar - 进度条控件 3 | */ 4 | 5 | package com.webabcd.androiddemo.view.progress; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class ProgressBarDemo1 extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_view_progress_progressbardemo1); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/progress/ProgressBarDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * ProgressBar - 进度条控件 3 | * setIndeterminateDrawable() - 设置圈圈进度条的样式 4 | * setProgressDrawable() - 设置长条进度条的样式 5 | */ 6 | 7 | package com.webabcd.androiddemo.view.progress; 8 | 9 | import androidx.appcompat.app.AppCompatActivity; 10 | import android.os.Bundle; 11 | 12 | import com.webabcd.androiddemo.R; 13 | 14 | public class ProgressBarDemo2 extends AppCompatActivity { 15 | 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_view_progress_progressbardemo2); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/progress/RatingBarDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * RatingBar - 评分条 3 | */ 4 | 5 | package com.webabcd.androiddemo.view.progress; 6 | 7 | import androidx.appcompat.app.AppCompatActivity; 8 | import android.os.Bundle; 9 | 10 | import com.webabcd.androiddemo.R; 11 | 12 | public class RatingBarDemo2 extends AppCompatActivity { 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | setContentView(R.layout.activity_view_progress_ratingbardemo2); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/selection/CheckBoxDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * CheckBox - 复选框控件 3 | * setButtonDrawable() - 设置复选框图片在各种状态下的样式 4 | * 5 | * 6 | * 本例主要介绍 CheckBox 的样式 7 | */ 8 | 9 | package com.webabcd.androiddemo.view.selection; 10 | 11 | import androidx.appcompat.app.AppCompatActivity; 12 | import android.os.Bundle; 13 | import android.widget.CheckBox; 14 | 15 | import com.webabcd.androiddemo.R; 16 | 17 | public class CheckBoxDemo2 extends AppCompatActivity { 18 | 19 | private CheckBox _checkBox3; 20 | 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_view_selection_checkboxdemo2); 25 | 26 | _checkBox3 = (CheckBox)findViewById(R.id.checkBox3); 27 | _checkBox3.setButtonDrawable(R.drawable.selector_checkbox_button); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/selection/SpinnerDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Spinner - 列表选择框控件 3 | * 4 | * 本例主要介绍 Spinner 的样式 5 | */ 6 | 7 | package com.webabcd.androiddemo.view.selection; 8 | 9 | import androidx.appcompat.app.AppCompatActivity; 10 | import android.os.Bundle; 11 | 12 | import com.webabcd.androiddemo.R; 13 | 14 | public class SpinnerDemo2 extends AppCompatActivity { 15 | 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_view_selection_spinnerdemo2); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/selection/ToggleButtonDemo2.java: -------------------------------------------------------------------------------- 1 | /** 2 | * ToggleButton - 双状态按钮 3 | * setButtonDrawable() - 设置双状态按钮在各种状态下的样式 4 | */ 5 | 6 | package com.webabcd.androiddemo.view.selection; 7 | 8 | import androidx.appcompat.app.AppCompatActivity; 9 | import android.os.Bundle; 10 | import android.widget.ToggleButton; 11 | 12 | import com.webabcd.androiddemo.R; 13 | 14 | public class ToggleButtonDemo2 extends AppCompatActivity { 15 | 16 | private ToggleButton _toggleButton2; 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_view_selection_togglebuttondemo2); 22 | 23 | _toggleButton2 = (ToggleButton)findViewById(R.id.toggleButton2); 24 | _toggleButton2.setButtonDrawable(R.drawable.selector_togglebutton_button); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/text/TextViewMarquee.java: -------------------------------------------------------------------------------- 1 | /** 2 | * TextViewMarquee - 允许一个页面内存在多个跑马灯的 TextView 3 | */ 4 | 5 | package com.webabcd.androiddemo.view.text; 6 | 7 | import android.content.Context; 8 | import android.util.AttributeSet; 9 | 10 | // xml 中的 TextView 在编译时自动替换为 AppCompatTextView 11 | // 代码中的 TextView 在 Android 8.0 系统及以上与 AppCompatTextView 相同 12 | public class TextViewMarquee extends androidx.appcompat.widget.AppCompatTextView { 13 | 14 | public TextViewMarquee(Context context) { 15 | super(context); 16 | } 17 | 18 | public TextViewMarquee(Context context, AttributeSet attrs, int defStyle) { 19 | super(context, attrs, defStyle); 20 | } 21 | 22 | public TextViewMarquee(Context context, AttributeSet attrs) { 23 | super(context, attrs); 24 | } 25 | 26 | /** 27 | * 告诉系统我是焦点,从而支持一个页面存在多个跑马灯 TextView 28 | */ 29 | @Override 30 | public boolean isFocused() { 31 | return true; 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/text/utils/KeyboardHeightObserver.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 用于监听软键盘高度变化的接口 3 | */ 4 | 5 | package com.webabcd.androiddemo.view.text.utils; 6 | 7 | public interface KeyboardHeightObserver { 8 | void onKeyboardHeightChanged(int height); 9 | } -------------------------------------------------------------------------------- /app/src/main/java/com/webabcd/androiddemo/view/text/utils/URLImageGetterDrawable.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 用于绘制 ImageGetter 获得的 Drawable 对象 3 | * 4 | * 因为 ImageGetter 返回的 Drawable 是不可变的,但是在网络图片下载完成后需要将它绘制出来,所以需要对 Drawable 再做一层封装 5 | */ 6 | 7 | package com.webabcd.androiddemo.view.text.utils; 8 | 9 | import android.graphics.Canvas; 10 | import android.graphics.drawable.BitmapDrawable; 11 | import android.graphics.drawable.Drawable; 12 | 13 | public class URLImageGetterDrawable extends BitmapDrawable { 14 | 15 | // 需要被绘制的 Drawable 对象 16 | protected Drawable drawable; 17 | 18 | @Override 19 | public void draw(Canvas canvas) { 20 | if(drawable != null) { 21 | drawable.draw(canvas); 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH := $(call my-dir) 2 | 3 | #模块1 4 | include $(CLEAR_VARS) #清除 LOCAL_MODULE, LOCAL_SRC_FILES 之类的变量 5 | LOCAL_CPP_EXTENSION := .cpp # C++ 文件的扩展名 6 | LOCAL_MODULE := jniHello # 模块名。如果模块名为“abc”,则此模块将会生成“libabc.so”文件。 7 | LOCAL_SRC_FILES := cHello.c # 需要编译的源文件 8 | include $(BUILD_SHARED_LIBRARY) # 编译当前模块 9 | 10 | #模块2 -------------------------------------------------------------------------------- /app/src/main/jni/Application.mk: -------------------------------------------------------------------------------- 1 | #如果没有用到 c++ 则可以不配置此文件 -------------------------------------------------------------------------------- /app/src/main/jni/cHello.c: -------------------------------------------------------------------------------- 1 | #include "cHello.h" 2 | #include 3 | 4 | JNIEXPORT jstring JNICALL Java_com_webabcd_androiddemo_ndk_NdkDemo1_helloJniC(JNIEnv *env, jobject obj) { 5 | return (*env)->NewStringUTF(env, "hello: ndk"); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/jni/cHello.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifndef _Included_com_webabcd_androiddemo_ndk_NdeDemo1 4 | #define _Included_com_webabcd_androiddemo_ndk_NdeDemo1 5 | #ifdef __cplusplus 6 | extern "C" { 7 | #endif 8 | 9 | JNIEXPORT jstring JNICALL Java_com_webabcd_androiddemo_ndk_NdkDemo1_helloJniC(JNIEnv *env, jobject obj); 10 | 11 | #ifdef __cplusplus 12 | } 13 | #endif 14 | #endif -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libjniHello.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/jniLibs/arm64-v8a/libjniHello.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libjniHello.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/jniLibs/armeabi-v7a/libjniHello.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libjniHello.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/jniLibs/x86/libjniHello.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86_64/libjniHello.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/jniLibs/x86_64/libjniHello.so -------------------------------------------------------------------------------- /app/src/main/res/anim/accelerateinterpolator_animation_animationdemo2.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_flip_horizontal_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_flip_horizontal_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_push_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_push_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_zoom_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_zoom_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alertdialog_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alertdialog_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_push_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_push_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_zoom_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/fragment_zoom_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popupwindow_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popupwindow_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/translate_animationdemo2.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/anim/viewflipper_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/viewflipper_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/viewflipper_right_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/viewflipper_right_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/animator/animator_animation_animationdemo5.xml: -------------------------------------------------------------------------------- 1 | 14 | 15 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_button_textcolor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/son02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-mdpi/son02.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_expand_less.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/ic_expand_less.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_expand_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/ic_expand_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_ratingbar_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/ic_ratingbar_background.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_ratingbar_progress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/ic_ratingbar_progress.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_ratingbar_secondaryprogress.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/ic_ratingbar_secondaryprogress.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_activity_lifecycle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_activity_lifecycle.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_dialog_ninepatch.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_dialog_ninepatch.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_dialog_original.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_dialog_original.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_fragment_lifecycle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_fragment_lifecycle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_sample_son.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_sample_son.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_theme_explain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_theme_explain.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_thread_state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/img_thread_state.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/son01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/drawable-xxhdpi/son01.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/animationlist_animationdemo4.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/animationlist_progressbar_indeterminate.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_checkbox_button_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_checkbox_button_unchecked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_expand_group_collapsed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_expand_group_expanded.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_progressbar_indeterminate.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_radiobutton_button_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_radiobutton_button_unchecked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_ratingbar_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 12 | 13 | 14 | 17 | 18 | 19 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_splash_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_togglebutton_button_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/layerlist_togglebutton_button_unchecked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rotate_progressbar_indeterminate.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 |    10 | 15 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_checkbox_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 13 | 14 | 18 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_expand_group.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 |     8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_listview_item_background_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_listview_item_background_selected.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_radiobutton_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_seekbar_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_switch_thumb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_switch_track.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_togglebutton_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 12 | 13 | 17 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_button_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_edittext_bottom_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_edittext_cursor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_linearlayout_divider_vertical.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_listview_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_recyclerview_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_gradient_linear.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 17 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_gradient_radial.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 17 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_gradient_sweep.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 16 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_oval.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_padding.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_rectangle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 10 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_ring.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_size.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 11 | 12 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_sample_solid_stroke_corners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | 24 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_seekbar_thumb_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_seekbar_thumb_unpressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_switch_thumb_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_switch_thumb_unpressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_switch_track_checked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_switch_track_unchecked.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_toast_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | 18 | 19 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/font/myfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/webabcd/AndroidDemo/02031106c66b359162f32f6564c557f708cea593/app/src/main/res/font/myfont.ttf -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_activity_activitydemo1.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 |