├── .gitignore ├── README ├── app ├── .gitignore ├── assets │ └── fonts │ │ └── dnmbhs.ttf ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── example │ │ └── androidremark │ │ ├── MainActivity.java │ │ ├── MainAdapter.java │ │ ├── MainMenuItemListener.java │ │ ├── animation │ │ └── ObjectAnimActivity.java │ │ ├── banner │ │ ├── Banner1Activity.java │ │ ├── GlideImageLoader.java │ │ └── ScaleTransformer.java │ │ ├── base │ │ └── BaseActivity.java │ │ ├── bean │ │ ├── CakeBean.java │ │ ├── ContactBean.java │ │ ├── GroupChildBean.java │ │ ├── MainMenuNameBean.java │ │ ├── ProductTypeBean.java │ │ ├── ShopProductBean.java │ │ └── SwitchVideoModel.java │ │ ├── network │ │ └── SocketTestActivity.java │ │ ├── permission │ │ ├── PermissionActivity.java │ │ └── XPermission.java │ │ ├── statusbarutil │ │ ├── ColorStatusBarActivity.java │ │ ├── ImageFragment.java │ │ ├── ImageStatusBarActivity.java │ │ ├── ImageViewActivity.java │ │ ├── SimpleFragment.java │ │ ├── StatusBarActivity.java │ │ ├── SwipeBackActivity.java │ │ └── UseInFragmentActivity.java │ │ ├── ui │ │ ├── alerter │ │ │ ├── Alert.java │ │ │ ├── Alerter.java │ │ │ ├── ExampleActivity.java │ │ │ ├── OnHideAlertListener.java │ │ │ ├── OnShowAlertListener.java │ │ │ └── SwipeDismissTouchListener.java │ │ ├── camera │ │ │ └── CameraActivity.java │ │ ├── chart │ │ │ └── cake │ │ │ │ ├── CakeView.java │ │ │ │ └── ChartActivity.java │ │ ├── contacts │ │ │ ├── BaseItemAnimator.java │ │ │ ├── ColorGenerator.java │ │ │ ├── ContactAdapter.java │ │ │ ├── ContactsActivity.java │ │ │ ├── CustomItemDecoration.java │ │ │ ├── IndexBar.java │ │ │ ├── SideBar.java │ │ │ ├── SlideInOutLeftItemAnimator.java │ │ │ └── TextDrawable.java │ │ ├── flow │ │ │ ├── FlowLayoutActivity.java │ │ │ └── myflow │ │ │ │ ├── FlowLayout.java │ │ │ │ └── MyFlowActivity.java │ │ ├── gesture │ │ │ ├── LockPatternIndicator.java │ │ │ ├── LockPatternUtil.java │ │ │ └── LockPatternView.java │ │ ├── hight │ │ │ └── ViewHighLight.java │ │ ├── imageview │ │ │ ├── AppDragAdapter.java │ │ │ └── ScratchActivity.java │ │ ├── interfaceloading │ │ │ ├── TipActivity.java │ │ │ ├── XLoadingLayout.java │ │ │ └── XLoadingViewConfig.java │ │ ├── layout │ │ │ ├── CoordinatorLayoutActivity.java │ │ │ └── WangYiActivity.java │ │ ├── lizi │ │ │ ├── LiZiActivity.kt │ │ │ └── VortexView.java │ │ ├── payment │ │ │ ├── ALiPayActivity.java │ │ │ ├── AlipayView.java │ │ │ └── TaskClearDrawable.java │ │ ├── popup │ │ │ ├── CommonPopupWindow.java │ │ │ ├── PopupAdapter.java │ │ │ ├── PopupController.java │ │ │ └── PopupTestActivity.java │ │ ├── qq │ │ │ ├── SwipeAdapter.java │ │ │ └── SwipeMenuActivity.java │ │ ├── recycler │ │ │ ├── LineItemDecoration.java │ │ │ ├── RecyclerViewActivity.java │ │ │ ├── RecyclerViewAdapter.java │ │ │ ├── TimeLineDecoration.java │ │ │ ├── sticky │ │ │ │ ├── AllItemBean.java │ │ │ │ ├── DataUtil.java │ │ │ │ ├── ItemInfoBean.java │ │ │ │ ├── StickHeaderAdapter.java │ │ │ │ ├── StickyHeaderDecoration.java │ │ │ │ └── StickyRecyclerActivity.java │ │ │ └── sticky2 │ │ │ │ ├── MData.kt │ │ │ │ ├── StickyGridLayoutManager.java │ │ │ │ ├── StickyRvActivity.kt │ │ │ │ └── StickyRvAdapter.java │ │ ├── scale │ │ │ └── ScaleBigView.java │ │ └── textview │ │ │ ├── StrikeTextViewActivity.java │ │ │ ├── span │ │ │ └── SpanActivity.java │ │ │ └── verticalroll │ │ │ ├── AdItemViewAdapter.java │ │ │ ├── AdverItemView.java │ │ │ └── AdverNotice.java │ │ ├── ui2 │ │ ├── baserecycler │ │ │ ├── BaseRecyclerActivity.java │ │ │ ├── BaseRecyclerViewAdapter.java │ │ │ ├── DividerDecoration.java │ │ │ ├── XRecyclerViewAdapter.java │ │ │ └── XViewHolder.java │ │ ├── button │ │ │ ├── SwitchButton.java │ │ │ └── SwitchButtonActivity.java │ │ ├── calendar │ │ │ ├── CalendarActivity.java │ │ │ ├── CalendarAdapter.java │ │ │ ├── CalendarCellTextView.java │ │ │ ├── XCalendarView.java │ │ │ └── calendarBean.java │ │ ├── drag │ │ │ └── DragStickerActivity.java │ │ ├── grouprecycler │ │ │ ├── GroupRecyAdapter.java │ │ │ └── GroupRecyclerActivity.java │ │ ├── meituan │ │ │ └── MTOutFoodActivity.java │ │ ├── sinmath │ │ │ ├── MySinView.java │ │ │ ├── MyWaveView.java │ │ │ └── SinActivity.java │ │ ├── tree_recycler │ │ │ ├── FirstLevelNodeViewBinder.java │ │ │ ├── FiveLevelNodeViewBinder.java │ │ │ ├── FourLevelNodeViewBinder.java │ │ │ ├── MyNodeViewFactory.java │ │ │ ├── SecondLevelNodeViewBinder.java │ │ │ ├── ThridLevelNodeViewBinder.java │ │ │ └── TreeRecyviewActivity.java │ │ └── xloadingdialog │ │ │ ├── XColorDrawable.java │ │ │ ├── XLoadingDialog.java │ │ │ └── XLoadingDialogActivity.java │ │ ├── ui3 │ │ ├── WangYiGdActivity.java │ │ ├── column │ │ │ ├── ColumnCharActivity.java │ │ │ ├── ColumnCharAdapter.java │ │ │ └── ColumnValueBean.java │ │ ├── contacts │ │ │ ├── ContactsBean.java │ │ │ ├── ContactsTask.java │ │ │ ├── FileResultCallback.java │ │ │ └── XContactsActivity.java │ │ ├── dagger │ │ │ ├── AObject.java │ │ │ ├── BObject.java │ │ │ ├── DaggerTestActivity.java │ │ │ ├── MainComponent.java │ │ │ ├── MainModule.java │ │ │ ├── a │ │ │ │ ├── CarA.java │ │ │ │ ├── CarComponent.java │ │ │ │ └── EngineA.java │ │ │ ├── b │ │ │ │ ├── CarB.java │ │ │ │ ├── CarComponentB.java │ │ │ │ ├── CarModuleB.java │ │ │ │ └── EngineB.java │ │ │ └── c │ │ │ │ ├── CarC.java │ │ │ │ ├── CarComponentC.java │ │ │ │ ├── CarModuleC.java │ │ │ │ └── EngineC.java │ │ ├── dashboard │ │ │ ├── DashBoardActivity.java │ │ │ ├── DashBoardView.java │ │ │ ├── DashboardView1.java │ │ │ ├── DashboardView2.java │ │ │ ├── DashboardView3.java │ │ │ └── DashboardView4.java │ │ ├── drag │ │ │ ├── CustomPointF.java │ │ │ ├── DragActivity.java │ │ │ └── GestureView.java │ │ ├── eventBus │ │ │ ├── EventBusBean.java │ │ │ └── EventbusActivity.java │ │ ├── group │ │ │ ├── BaseGroupBean.java │ │ │ ├── BaseGroupRecyclerActivity.java │ │ │ ├── GroupDataSource.java │ │ │ ├── StickyHeaderAdapter.java │ │ │ └── StickyHeaderDecoration.java │ │ ├── light │ │ │ └── ColorLightActivity.java │ │ ├── photocropper │ │ │ ├── CropImageView.java │ │ │ ├── CropListener.java │ │ │ ├── CropPosition.java │ │ │ ├── DotsPosition.kt │ │ │ ├── OverlayView.java │ │ │ ├── PhotocropperActivity.java │ │ │ └── StandJumpRangeView.kt │ │ ├── pwd │ │ │ ├── PwdInputActivity.java │ │ │ └── PwdInputView.java │ │ ├── rv │ │ │ ├── RvProgressActivity.kt │ │ │ └── VerticalTabRvActivity.java │ │ ├── stickscroll │ │ │ ├── StickScrollViewActivity.java │ │ │ └── StickyNestedScrollView.java │ │ ├── tantan │ │ │ ├── CardConfig.java │ │ │ ├── SwipeCardBean.java │ │ │ ├── SwipeCardCallback.java │ │ │ ├── SwipeCardLayoutManager.java │ │ │ └── TanTanRvActivity.java │ │ └── viewpager │ │ │ └── ViewPagerActivity.java │ │ ├── utils │ │ ├── ColorUtil.java │ │ ├── ContactsUtils.java │ │ ├── DeviceHelper.java │ │ ├── MyUtils.java │ │ ├── StatusBarHelper.java │ │ ├── StatusBarUtil.java │ │ ├── StatusBarUtils.java │ │ ├── StatusBarView.java │ │ ├── XLogUtils.java │ │ ├── XOutdatedUtils.java │ │ ├── XSpanUtils.java │ │ └── net │ │ │ ├── NetSpeed.java │ │ │ └── NetSpeedTimer.java │ │ ├── view │ │ ├── AttachButton.kt │ │ ├── BlurMaskCircularView.java │ │ ├── CircleImageView.java │ │ ├── DragGridView.java │ │ ├── MyProgressBar.java │ │ ├── NoScrollGridView.java │ │ ├── RounProgressActivity.java │ │ ├── RoundProgressBar.java │ │ ├── XRvHorizontalProgress.java │ │ └── colorpicker │ │ │ ├── ColorPicker.java │ │ │ ├── OpacityBar.java │ │ │ ├── SVBar.java │ │ │ ├── SaturationBar.java │ │ │ └── ValueBar.java │ │ ├── watermask │ │ ├── StickerHelper.kt │ │ ├── StickerMoveHelper.kt │ │ ├── StickerRotateHelper.kt │ │ ├── WaterMarkImageView.kt │ │ ├── WaterMarkStickerView.kt │ │ ├── WaterMarkView.kt │ │ ├── WatermarkActivity.kt │ │ ├── WatermarkCanvs.kt │ │ └── impl │ │ │ ├── WaterMarkStickerImpl.kt │ │ │ ├── WatermarkAction.kt │ │ │ ├── WatermarkCallback.kt │ │ │ └── WatermarkInfo.kt │ │ └── widget │ │ ├── ScratchView.java │ │ ├── StrikeTextView.java │ │ ├── swipe_menu │ │ ├── MyDividerDecoration.java │ │ ├── SwipeMenuLayout.java │ │ └── SwipeRecycleView.java │ │ └── tree │ │ ├── TreeNode.java │ │ ├── TreeView.java │ │ ├── TreeViewAdapter.java │ │ ├── base │ │ ├── BaseNodeViewBinder.java │ │ ├── BaseNodeViewFactory.java │ │ ├── BaseTreeAction.java │ │ ├── CheckableNodeViewBinder.java │ │ └── SelectableTreeAction.java │ │ └── helper │ │ └── TreeHelper.java │ └── res │ ├── anim │ ├── alerter_pulse.xml │ ├── alerter_slide_in_from_top.xml │ ├── alerter_slide_out_to_top.xml │ ├── interpolator_slight_anticipate.xml │ ├── interpolator_slight_overshoot.xml │ ├── push_bottom_in.xml │ ├── push_bottom_out.xml │ ├── push_scale_in.xml │ ├── push_scale_left_in.xml │ ├── push_scale_left_out.xml │ ├── push_scale_out.xml │ ├── push_scale_right_in.xml │ └── push_scale_right_out.xml │ ├── drawable-xhdpi │ ├── a.png │ ├── adapter_loading_error.png │ ├── adapter_loading_no_data.png │ ├── app_logo.png │ ├── avatar1.jpg │ ├── avatar2.jpg │ ├── b.png │ ├── banner_grey.png │ ├── banner_red.png │ ├── bg.png │ ├── bg_girl.jpg │ ├── bg_monkey.jpg │ ├── bg_monkey_king.jpg │ ├── btn_top_arrow_back_white.png │ ├── c.png │ ├── circle.png │ ├── d.png │ ├── e.png │ ├── ic_avatar.png │ ├── ic_favorite.png │ ├── ic_gavel.png │ ├── ic_grade.png │ ├── ic_gray_t1.png │ ├── ic_gray_t2.png │ ├── ic_gray_t3.png │ ├── ic_gray_t4.png │ ├── ic_gray_t5.png │ ├── ic_group_work.png │ ├── ic_lower_arrow.png │ ├── ic_next_month.png │ ├── ic_pre_month.png │ ├── ic_up_blue_arrow.png │ ├── ic_withe_light.png │ ├── ic_yellow_t1.png │ ├── ic_yellow_t2.png │ ├── ic_yellow_t3.png │ ├── ic_yellow_t4.png │ ├── ic_yellow_t5.png │ ├── mark_pic_normal.9.png │ ├── nav_header_bg.jpg │ ├── photo1.jpg │ ├── photo2.jpg │ ├── photo3.jpg │ ├── photo4.jpg │ ├── query_icon_normal.png │ ├── x_loading_empty.png │ ├── x_loading_error.png │ └── x_loading_no_network.png │ ├── drawable │ ├── alerter_ic_face.xml │ ├── alerter_ic_notifications.xml │ ├── checked_bg.xml │ ├── dialogui_selector_left_bottom.xml │ ├── ic_keyboard_arrow_right_white_24px.xml │ ├── ic_menu_camera.xml │ ├── ic_menu_gallery.xml │ ├── ic_menu_manage.xml │ ├── ic_menu_send.xml │ ├── ic_menu_share.xml │ ├── ic_menu_slideshow.xml │ ├── ic_thumb_circular.xml │ ├── indicator_bg_normal.xml │ ├── indicator_bg_select.xml │ ├── normal_bg.xml │ ├── popup_grey_bg.xml │ ├── popup_item_bg.xml │ ├── progress_vertical.xml │ ├── seek_bar_withe.xml │ ├── selector_txt.xml │ ├── shape_gradient_color.xml │ ├── tag_bg.xml │ ├── text_color.xml │ └── x_loading_btn_selector.xml │ ├── layout │ ├── activity_banner1.xml │ ├── activity_base_group_recycler.xml │ ├── activity_base_recycler.xml │ ├── activity_calendar.xml │ ├── activity_camera.xml │ ├── activity_chart.xml │ ├── activity_color_light.xml │ ├── activity_color_status_bar.xml │ ├── activity_column_char.xml │ ├── activity_contacts.xml │ ├── activity_coordinator_layout.xml │ ├── activity_dagger_test.xml │ ├── activity_dash_board.xml │ ├── activity_drag.xml │ ├── activity_drag_sticker.xml │ ├── activity_eventbus.xml │ ├── activity_example.xml │ ├── activity_flow_layout.xml │ ├── activity_group_recycler.xml │ ├── activity_image_status_bar.xml │ ├── activity_image_view.xml │ ├── activity_line_chart.xml │ ├── activity_lizi.xml │ ├── activity_main.xml │ ├── activity_main2.xml │ ├── activity_mock.xml │ ├── activity_mtout_food.xml │ ├── activity_my_flow.xml │ ├── activity_object_anim.xml │ ├── activity_payment.xml │ ├── activity_payment2.xml │ ├── activity_permission2.xml │ ├── activity_photocropper.xml │ ├── activity_popup_test.xml │ ├── activity_pwd_input.xml │ ├── activity_recycle_view.xml │ ├── activity_recycler_view.xml │ ├── activity_roun_progress.xml │ ├── activity_rv_progress.xml │ ├── activity_scratch.xml │ ├── activity_sin.xml │ ├── activity_socket_test.xml │ ├── activity_span.xml │ ├── activity_stick_scroll_view.xml │ ├── activity_sticky2.xml │ ├── activity_sticky_recycler.xml │ ├── activity_strike_text_view.xml │ ├── activity_swipe_menu.xml │ ├── activity_switch_button.xml │ ├── activity_tan_tan_rv.xml │ ├── activity_tip.xml │ ├── activity_tree_recyview.xml │ ├── activity_use_in_fragment.xml │ ├── activity_vertical_tab_rv.xml │ ├── activity_view_pager.xml │ ├── activity_wang_yi.xml │ ├── activity_wang_yi_gd.xml │ ├── activity_water_mask.xml │ ├── activity_xloading_dialog.xml │ ├── adapter_loading.xml │ ├── adapter_loading_empty.xml │ ├── adapter_loading_failed.xml │ ├── adapter_no_more.xml │ ├── adver_view_item.xml │ ├── alerter_alert_view.xml │ ├── calendar_layout.xml │ ├── categorize_item.xml │ ├── content_example.xml │ ├── crop_image_view.xml │ ├── dome_item.xml │ ├── dome_item_group.xml │ ├── fragement_image.xml │ ├── fragement_simple.xml │ ├── header_item.xml │ ├── hint_dialog.xml │ ├── item_calecdar_cell.xml │ ├── item_first_level.xml │ ├── item_five_level.xml │ ├── item_four_level.xml │ ├── item_list_child.xml │ ├── item_list_column_char.xml │ ├── item_list_drag_menu.xml │ ├── item_list_group.xml │ ├── item_list_main.xml │ ├── item_list_recycler.xml │ ├── item_list_rv_progress.xml │ ├── item_list_sticky_recycler.xml │ ├── item_second_level.xml │ ├── item_swipe_card.xml │ ├── item_thrid_level.xml │ ├── layout_banner.xml │ ├── layout_rv_horizontal_progrss.xml │ ├── layout_y_column.xml │ ├── m_toolbar.xml │ ├── nav_header.xml │ ├── popup_down.xml │ ├── popup_item.xml │ ├── popup_left_or_right.xml │ ├── popup_up.xml │ ├── query_info.xml │ ├── recycle_item_layout.xml │ ├── recycle_sticky2.xml │ ├── recycle_sticky2_group.xml │ ├── swipe_back_activity.xml │ ├── swipe_menu_item.xml │ ├── tv.xml │ ├── xloading_dialog.xml │ ├── xloading_empty_view.xml │ ├── xloading_error_view.xml │ ├── xloading_loading_view.xml │ └── xloading_no_network_view.xml │ ├── menu │ ├── activity_main_drawer.xml │ ├── bottom_bar_items.xml │ ├── home_menu.xml │ ├── navigation.xml │ └── toolbar_right.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── btn_top_arrow_back_white.png │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_back.png │ ├── ic_launcher.png │ ├── ic_launcher_round.png │ ├── image_ic_adjust.png │ └── image_ic_delete.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── values-v19 │ └── dimens.xml │ ├── values-w820dp │ └── dimens.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── drawables.xml │ ├── ids.xml │ ├── refs.xml │ ├── strings.xml │ ├── styles.xml │ └── switch_button_attrs.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── 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 | local.properties 16 | /.idea/ 17 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/README -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/assets/fonts/dnmbhs.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/assets/fonts/dnmbhs.ttf -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in F:\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/MainMenuItemListener.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * 主页 recyclerView的点击事件监听 7 | * Created by 82165 on 2017/6/15. 8 | */ 9 | 10 | public interface MainMenuItemListener { 11 | void onItemClick(View view, int position); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/banner/GlideImageLoader.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.banner; 2 | 3 | import android.content.Context; 4 | import android.widget.ImageView; 5 | 6 | import com.bumptech.glide.Glide; 7 | import com.example.androidremark.R; 8 | import com.youth.banner.loader.ImageLoader; 9 | 10 | /** 11 | * 重写图片加载器 12 | * Created by caobin on 2017/1/6. 13 | */ 14 | public class GlideImageLoader extends ImageLoader { 15 | /** 16 | * @param context 17 | * @param path 路径 可以是本地也可以是网址 18 | * @param imageView 19 | */ 20 | @Override 21 | public void displayImage(Context context, Object path, ImageView imageView) { 22 | 23 | //Glide 加载图片简单用法 24 | Glide.with(context.getApplicationContext()).load(path) 25 | //.error(R.drawable.avatar1) 26 | .placeholder(R.drawable.avatar1) 27 | .dontAnimate() 28 | .crossFade(1000) 29 | .into(imageView); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/banner/ScaleTransformer.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.banner; 2 | 3 | import android.support.v4.view.ViewPager; 4 | import android.view.View; 5 | 6 | /** 7 | * Created by cb on 2017/10/11. 8 | */ 9 | 10 | public class ScaleTransformer implements ViewPager.PageTransformer { 11 | 12 | private float MAX = -1.0f; 13 | private float MIN = -1.0f; 14 | 15 | public ScaleTransformer(float maxScale, float minScale) { 16 | if (maxScale > 0 && minScale > 0) { 17 | MAX = maxScale; 18 | MIN = minScale; 19 | } 20 | } 21 | 22 | @Override 23 | public void transformPage(View page, float position) { 24 | 25 | if (position < -1) { 26 | position = -1; 27 | } else if (position > 1) { 28 | position = 1; 29 | } 30 | 31 | float tempScale = position < 0 ? 1 + position : 1 - position; 32 | 33 | float slope = (MAX - MIN) / 1; 34 | // 35 | float scaleValue=MIN+tempScale*slope; 36 | 37 | if (position < 0) { 38 | //ViewH 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/bean/CakeBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.bean; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created by cacobin on 2016/12/15. 7 | */ 8 | 9 | public class CakeBean implements Serializable { 10 | public String name;//名字 11 | public float value;//值 12 | public float degree;//旋转过的角度 13 | public int mColor;//圆弧颜色 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/bean/ContactBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.bean; 2 | 3 | /** 4 | * 联系人 5 | * Created by MQ on 2017/5/16. 6 | */ 7 | 8 | public class ContactBean { 9 | private String indexTag; 10 | private String name; 11 | 12 | public String getIndexTag() { 13 | return indexTag; 14 | } 15 | 16 | public void setIndexTag(String indexTag) { 17 | this.indexTag = indexTag; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public void setName(String name) { 25 | this.name = name; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/bean/ProductTypeBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.bean; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by 小区商圈 on 2016/7/12 0012. 7 | * 小区商圈商品类型 8 | */ 9 | public class ProductTypeBean { 10 | 11 | private int id; 12 | private String type; 13 | private String createtime; 14 | private List product; 15 | 16 | public int getId() { 17 | return id; 18 | } 19 | 20 | public void setId(int id) { 21 | this.id = id; 22 | } 23 | 24 | public String getType() { 25 | return type; 26 | } 27 | 28 | public void setType(String type) { 29 | this.type = type; 30 | } 31 | 32 | public String getCreatetime() { 33 | return createtime; 34 | } 35 | 36 | public void setCreatetime(String createtime) { 37 | this.createtime = createtime; 38 | } 39 | 40 | public List getProduct() { 41 | return product; 42 | } 43 | 44 | public void setProduct(List product) { 45 | this.product = product; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/bean/SwitchVideoModel.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.bean; 2 | 3 | /** 4 | * Created by shuyu on 2016/12/7. 5 | */ 6 | 7 | public class SwitchVideoModel { 8 | private String url; 9 | private String name; 10 | 11 | public SwitchVideoModel(String name, String url) { 12 | this.name = name; 13 | this.url = url; 14 | } 15 | 16 | public String getUrl() { 17 | return url; 18 | } 19 | 20 | public void setUrl(String url) { 21 | this.url = url; 22 | } 23 | 24 | public String getName() { 25 | return name; 26 | } 27 | 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | 32 | @Override 33 | public String toString() { 34 | return this.name; 35 | } 36 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/statusbarutil/ImageFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.statusbarutil; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | import android.support.v4.app.Fragment; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | 10 | import com.example.androidremark.R; 11 | 12 | 13 | /** 14 | * Created by Jaeger on 16/8/11. 15 | * 16 | * Email: chjie.jaeger@gmail.com 17 | * GitHub: https://github.com/laobie 18 | */ 19 | public class ImageFragment extends Fragment { 20 | 21 | @Nullable 22 | @Override 23 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 24 | return inflater.inflate(R.layout.fragement_image, container, false); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/statusbarutil/SimpleFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.statusbarutil; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.ColorInt; 5 | import android.support.annotation.Nullable; 6 | import android.support.v4.app.Fragment; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.TextView; 11 | 12 | import com.example.androidremark.R; 13 | 14 | 15 | /** 16 | * Created by Jaeger on 16/8/11. 17 | * 18 | * Email: chjie.jaeger@gmail.com 19 | * GitHub: https://github.com/laobie 20 | */ 21 | public class SimpleFragment extends Fragment { 22 | private TextView mTvTitle; 23 | private View mFakeStatusBar; 24 | 25 | @Override 26 | public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 27 | return inflater.inflate(R.layout.fragement_simple, container, false); 28 | } 29 | 30 | @Override 31 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 32 | super.onViewCreated(view, savedInstanceState); 33 | mTvTitle = (TextView) view.findViewById(R.id.tv_title); 34 | mFakeStatusBar = view.findViewById(R.id.fake_status_bar); 35 | } 36 | 37 | public void setTvTitleBackgroundColor(@ColorInt int color) { 38 | mTvTitle.setBackgroundColor(color); 39 | mFakeStatusBar.setBackgroundColor(color); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/alerter/OnHideAlertListener.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.alerter; 2 | 3 | /** 4 | * On Hide Alert Listener 5 | * 6 | * @author edgeorge 7 | * @since 20/02/2017. 8 | */ 9 | 10 | public interface OnHideAlertListener { 11 | /** 12 | * Called when the Alert is hidden 13 | */ 14 | void onHide(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/alerter/OnShowAlertListener.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.alerter; 2 | 3 | /** 4 | * On Show Alert Listener 5 | * 6 | * @author edgeorge 7 | * @since 20/02/2017. 8 | */ 9 | public interface OnShowAlertListener { 10 | /** 11 | * Called when the Alert is initially Shown 12 | */ 13 | void onShow(); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/flow/myflow/MyFlowActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.flow.myflow; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.example.androidremark.R; 6 | import com.example.androidremark.base.BaseActivity; 7 | 8 | public class MyFlowActivity extends BaseActivity { 9 | 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_my_flow); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/interfaceloading/XLoadingViewConfig.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.interfaceloading; 2 | 3 | 4 | import android.support.annotation.LayoutRes; 5 | 6 | import com.example.androidremark.R; 7 | 8 | 9 | public class XLoadingViewConfig { 10 | 11 | 12 | private int emptyViewResId = R.layout.xloading_empty_view; 13 | private int errorViewResId = R.layout.xloading_error_view; 14 | private int loadingViewResId = R.layout.xloading_loading_view; 15 | private int noNetworkViewResId = R.layout.xloading_no_network_view; 16 | 17 | public int getEmptyViewResId() { 18 | return emptyViewResId; 19 | } 20 | 21 | public XLoadingViewConfig setEmptyViewResId(@LayoutRes int emptyViewResId) { 22 | this.emptyViewResId = emptyViewResId; 23 | return this; 24 | } 25 | 26 | public int getErrorViewResId() { 27 | return errorViewResId; 28 | } 29 | 30 | public XLoadingViewConfig setErrorViewResId(@LayoutRes int errorViewResId) { 31 | this.errorViewResId = errorViewResId; 32 | return this; 33 | } 34 | 35 | public int getLoadingViewResId() { 36 | return loadingViewResId; 37 | } 38 | 39 | public XLoadingViewConfig setLoadingViewResId(@LayoutRes int loadingViewResId) { 40 | this.loadingViewResId = loadingViewResId; 41 | return this; 42 | } 43 | 44 | public int getNoNetworkViewResId() { 45 | return noNetworkViewResId; 46 | } 47 | 48 | public XLoadingViewConfig setNoNetworkViewResId(@LayoutRes int noNetworkViewResId) { 49 | this.noNetworkViewResId = noNetworkViewResId; 50 | return this; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/layout/WangYiActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.layout; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.example.androidremark.R; 6 | import com.example.androidremark.base.BaseActivity; 7 | 8 | public class WangYiActivity extends BaseActivity { 9 | 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_wang_yi); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/lizi/LiZiActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.lizi 2 | 3 | import android.os.Bundle 4 | import android.support.v7.widget.RecyclerView 5 | import android.support.v7.widget.Toolbar 6 | import android.view.View 7 | import com.example.androidremark.R 8 | import com.example.androidremark.base.BaseActivity 9 | 10 | /** 11 | * @author: cb 12 | * @date: 2024/1/27 16:33 13 | * @desc: 描述 14 | */ 15 | class LiZiActivity : BaseActivity() { 16 | 17 | 18 | override fun onCreate(savedInstanceState: Bundle?) { 19 | super.onCreate(savedInstanceState) 20 | setContentView(R.layout.activity_lizi) 21 | 22 | 23 | } 24 | 25 | 26 | 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/qq/SwipeMenuActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.qq; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.LinearLayoutManager; 5 | import android.support.v7.widget.Toolbar; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.base.BaseActivity; 9 | import com.example.androidremark.widget.swipe_menu.MyDividerDecoration; 10 | import com.example.androidremark.widget.swipe_menu.SwipeRecycleView; 11 | 12 | /** 13 | * 仿QQ的侧滑删除 14 | */ 15 | public class SwipeMenuActivity extends BaseActivity { 16 | 17 | @Override 18 | protected void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_swipe_menu); 21 | initViews(); 22 | } 23 | 24 | private void initViews() { 25 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 26 | initToolBar(toolbar, "滑动菜单", true, false); 27 | SwipeRecycleView swipe_recycleview = (SwipeRecycleView) findViewById(R.id.swipe_recycleview); 28 | swipe_recycleview.setLayoutManager(new LinearLayoutManager(this)); 29 | swipe_recycleview.addItemDecoration(new MyDividerDecoration()); 30 | SwipeAdapter swipeAdapter = new SwipeAdapter(this); 31 | swipe_recycleview.setAdapter(swipeAdapter); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/recycler/RecyclerViewActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.recycler; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.LinearLayoutManager; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.support.v7.widget.Toolbar; 7 | 8 | import com.example.androidremark.R; 9 | import com.example.androidremark.base.BaseActivity; 10 | 11 | public class RecyclerViewActivity extends BaseActivity { 12 | 13 | private RecyclerView mRecyclerView; 14 | private RecyclerViewAdapter mAdapter; 15 | 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_recycler_view); 20 | initView(); 21 | } 22 | 23 | private void initView() { 24 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 25 | initToolBar(toolbar, "时光轴", true); 26 | 27 | mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 28 | 29 | mAdapter = new RecyclerViewAdapter(this); 30 | LinearLayoutManager manager = new LinearLayoutManager(this); 31 | manager.setOrientation(LinearLayoutManager.VERTICAL); 32 | mRecyclerView.setLayoutManager(manager); 33 | mRecyclerView.addItemDecoration(new TimeLineDecoration(this)); 34 | mRecyclerView.setAdapter(mAdapter); 35 | 36 | mAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() { 37 | @Override 38 | public void OnItemClick(int position) { 39 | toast(position + ""); 40 | } 41 | }); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/recycler/sticky/AllItemBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.recycler.sticky; 2 | 3 | /** 4 | * 区分是分组还是内容 5 | * Created by caobin on 2016/9/27. 6 | */ 7 | public class AllItemBean { 8 | public boolean isGroupStart; 9 | public boolean isGroupEnd; 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/recycler/sticky/ItemInfoBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.recycler.sticky; 2 | 3 | /** 4 | * Created by caobin on 2017/9/11. 5 | */ 6 | 7 | public class ItemInfoBean { 8 | public String name; 9 | public String url; 10 | public String tag; 11 | 12 | public ItemInfoBean(String name, String url) { 13 | this.name = name; 14 | this.url = url; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/recycler/sticky2/MData.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.recycler.sticky2 2 | 3 | /** 4 | * @author: cb 5 | * @date: 2024/1/27 16:55 6 | * @desc: 描述 7 | */ 8 | data class MData( 9 | val itemType: Int = StickyRvActivity.ItemType.VIEW_TYPE_NORMAL, 10 | val name: String = "" 11 | ) {} -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui/textview/verticalroll/AdverNotice.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui.textview.verticalroll; 2 | 3 | /** 4 | * Created by wulee on 2016/5/13. 5 | */ 6 | public class AdverNotice { 7 | 8 | public String title; 9 | public String url; 10 | 11 | public AdverNotice(String title, String url) { 12 | this.title = title; 13 | this.url = url; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/baserecycler/XViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.baserecycler; 2 | 3 | import android.support.annotation.IdRes; 4 | import android.support.annotation.LayoutRes; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.util.SparseArray; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | 11 | /** 12 | * Created by caobin on 2017/9/13. 13 | */ 14 | 15 | public class XViewHolder extends RecyclerView.ViewHolder { 16 | 17 | private SparseArray viewArray = new SparseArray<>(); 18 | 19 | public XViewHolder(View itemView) { 20 | super(itemView); 21 | } 22 | 23 | public XViewHolder(ViewGroup parent, @LayoutRes int resId) { 24 | super(LayoutInflater.from(parent.getContext()).inflate(resId, parent, false)); 25 | } 26 | 27 | /** 28 | * 获取布局中的View 29 | * 30 | * @param viewId view的Id 31 | * @param View的类型 32 | * @return view 33 | */ 34 | public T getView(@IdRes int viewId) { 35 | View view = viewArray.get(viewId); 36 | if (view == null) { 37 | view = itemView.findViewById(viewId); 38 | viewArray.put(viewId, view); 39 | } 40 | return (T) view; 41 | } 42 | 43 | public View getConvertView() { 44 | return itemView; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/button/SwitchButtonActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.button; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.example.androidremark.R; 6 | import com.example.androidremark.base.BaseActivity; 7 | 8 | public class SwitchButtonActivity extends BaseActivity { 9 | 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_switch_button); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/calendar/calendarBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.calendar; 2 | 3 | import java.util.Date; 4 | 5 | /** 6 | * Created by caobin on 2017/9/19. 7 | */ 8 | 9 | public class calendarBean { 10 | 11 | private Date date; 12 | private boolean isMark; 13 | 14 | // public calendarBean(Date date) { 15 | // this.date = date; 16 | // } 17 | 18 | public boolean isMark() { 19 | return isMark; 20 | } 21 | 22 | public void setMark(boolean mark) { 23 | isMark = mark; 24 | } 25 | 26 | public Date getDate() { 27 | return date; 28 | } 29 | 30 | public void setDate(Date date) { 31 | this.date = date; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/drag/DragStickerActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.drag; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.GridLayoutManager; 5 | import android.support.v7.widget.OrientationHelper; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.support.v7.widget.Toolbar; 8 | 9 | import com.example.androidremark.R; 10 | import com.example.androidremark.base.BaseActivity; 11 | import com.example.androidremark.bean.GroupChildBean; 12 | import com.example.androidremark.bean.GroupChildBean.ResultMsgBean.GroupListBean.ChildListBean; 13 | import com.example.androidremark.ui2.grouprecycler.GroupRecyAdapter; 14 | import com.google.gson.Gson; 15 | 16 | import java.util.ArrayList; 17 | import java.util.LinkedHashMap; 18 | 19 | public class DragStickerActivity extends BaseActivity { 20 | 21 | 22 | 23 | @Override 24 | protected void onCreate(Bundle savedInstanceState) { 25 | super.onCreate(savedInstanceState); 26 | setContentView(R.layout.activity_drag_sticker); 27 | initView(); 28 | } 29 | 30 | private void initView() { 31 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 32 | initToolBar(toolbar, "分组recycler", true); 33 | 34 | 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/sinmath/SinActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.sinmath; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.example.androidremark.R; 6 | import com.example.androidremark.base.BaseActivity; 7 | 8 | public class SinActivity extends BaseActivity { 9 | 10 | MySinView mySinView; 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_sin); 16 | initView(); 17 | 18 | } 19 | 20 | private void initView() { 21 | mySinView = (MySinView) findViewById(R.id.sin_view); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/tree_recycler/FirstLevelNodeViewBinder.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.tree_recycler; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.widget.tree.TreeNode; 9 | import com.example.androidremark.widget.tree.base.CheckableNodeViewBinder; 10 | 11 | 12 | /** 13 | * Created by zxy on 17/4/23. 14 | */ 15 | 16 | public class FirstLevelNodeViewBinder extends CheckableNodeViewBinder { 17 | TextView textView; 18 | ImageView imageView; 19 | public FirstLevelNodeViewBinder(View itemView) { 20 | super(itemView); 21 | textView = (TextView) itemView.findViewById(R.id.node_name_view); 22 | imageView = (ImageView) itemView.findViewById(R.id.arrow_img); 23 | } 24 | 25 | @Override 26 | public int getCheckableViewId() { 27 | return R.id.checkBox; 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_first_level; 33 | } 34 | 35 | @Override 36 | public void bindView(final TreeNode treeNode) { 37 | textView.setText(treeNode.getValue().toString()); 38 | imageView.setRotation(treeNode.isExpanded() ? 90 : 0); 39 | } 40 | 41 | @Override 42 | public void onNodeToggled(TreeNode treeNode, boolean expand) { 43 | if (expand) { 44 | imageView.animate().rotation(90).setDuration(200).start(); 45 | } else { 46 | imageView.animate().rotation(0).setDuration(200).start(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/tree_recycler/FiveLevelNodeViewBinder.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.tree_recycler; 2 | 3 | import android.view.View; 4 | import android.widget.TextView; 5 | 6 | import com.example.androidremark.R; 7 | import com.example.androidremark.widget.tree.TreeNode; 8 | import com.example.androidremark.widget.tree.base.CheckableNodeViewBinder; 9 | 10 | 11 | /** 12 | * Created by zxy on 17/4/23. 13 | */ 14 | 15 | public class FiveLevelNodeViewBinder extends CheckableNodeViewBinder { 16 | TextView textView; 17 | public FiveLevelNodeViewBinder(View itemView) { 18 | super(itemView); 19 | textView = (TextView) itemView.findViewById(R.id.node_name_view); 20 | } 21 | 22 | @Override 23 | public int getCheckableViewId() { 24 | return R.id.checkBox; 25 | } 26 | 27 | @Override 28 | public int getLayoutId() { 29 | return R.layout.item_five_level; 30 | } 31 | 32 | @Override 33 | public void bindView(TreeNode treeNode) { 34 | textView.setText(treeNode.getValue().toString()); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/tree_recycler/FourLevelNodeViewBinder.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.tree_recycler; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.widget.tree.TreeNode; 9 | import com.example.androidremark.widget.tree.base.CheckableNodeViewBinder; 10 | 11 | 12 | /** 13 | * Created by zxy on 17/4/23. 14 | */ 15 | 16 | public class FourLevelNodeViewBinder extends CheckableNodeViewBinder { 17 | TextView textView; 18 | ImageView imageView; 19 | public FourLevelNodeViewBinder(View itemView) { 20 | super(itemView); 21 | textView = (TextView) itemView.findViewById(R.id.node_name_view); 22 | imageView = (ImageView) itemView.findViewById(R.id.arrow_img); 23 | } 24 | 25 | @Override 26 | public int getCheckableViewId() { 27 | return R.id.checkBox; 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_four_level; 33 | } 34 | 35 | @Override 36 | public void bindView(final TreeNode treeNode) { 37 | textView.setText(treeNode.getValue().toString()); 38 | imageView.setRotation(treeNode.isExpanded() ? 90 : 0); 39 | } 40 | 41 | @Override 42 | public void onNodeToggled(TreeNode treeNode, boolean expand) { 43 | if (expand) { 44 | imageView.animate().rotation(90).setDuration(200).start(); 45 | } else { 46 | imageView.animate().rotation(0).setDuration(200).start(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/tree_recycler/MyNodeViewFactory.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.tree_recycler; 2 | 3 | import android.view.View; 4 | 5 | import com.example.androidremark.widget.tree.base.BaseNodeViewBinder; 6 | import com.example.androidremark.widget.tree.base.BaseNodeViewFactory; 7 | 8 | 9 | /** 10 | * Created by zxy on 17/4/23. 11 | */ 12 | 13 | public class MyNodeViewFactory extends BaseNodeViewFactory { 14 | 15 | @Override 16 | public BaseNodeViewBinder getNodeViewBinder(View view, int level) { 17 | switch (level) { 18 | case 0: 19 | return new FirstLevelNodeViewBinder(view); 20 | case 1: 21 | return new SecondLevelNodeViewBinder(view); 22 | case 2: 23 | return new ThridLevelNodeViewBinder(view); 24 | case 3: 25 | return new FourLevelNodeViewBinder(view); 26 | case 4: 27 | return new FiveLevelNodeViewBinder(view); 28 | default: 29 | return null; 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/tree_recycler/SecondLevelNodeViewBinder.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.tree_recycler; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.widget.tree.TreeNode; 9 | import com.example.androidremark.widget.tree.base.CheckableNodeViewBinder; 10 | 11 | /** 12 | * Created by zxy on 17/4/23. 13 | */ 14 | 15 | public class SecondLevelNodeViewBinder extends CheckableNodeViewBinder { 16 | 17 | TextView textView; 18 | ImageView imageView; 19 | public SecondLevelNodeViewBinder(View itemView) { 20 | super(itemView); 21 | textView = (TextView) itemView.findViewById(R.id.node_name_view); 22 | imageView = (ImageView) itemView.findViewById(R.id.arrow_img); 23 | } 24 | 25 | @Override 26 | public int getCheckableViewId() { 27 | return R.id.checkBox; 28 | } 29 | 30 | @Override 31 | public int getLayoutId() { 32 | return R.layout.item_second_level; 33 | } 34 | 35 | @Override 36 | public void bindView(final TreeNode treeNode) { 37 | textView.setText(treeNode.getValue().toString()); 38 | imageView.setRotation(treeNode.isExpanded() ? 90 : 0); 39 | } 40 | 41 | @Override 42 | public void onNodeToggled(TreeNode treeNode, boolean expand) { 43 | if (expand) { 44 | imageView.animate().rotation(90).setDuration(200).start(); 45 | } else { 46 | imageView.animate().rotation(0).setDuration(200).start(); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/tree_recycler/ThridLevelNodeViewBinder.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.tree_recycler; 2 | 3 | import android.view.View; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.widget.tree.TreeNode; 9 | import com.example.androidremark.widget.tree.base.CheckableNodeViewBinder; 10 | 11 | /** 12 | * Created by zxy on 17/4/23. 13 | */ 14 | 15 | public class ThridLevelNodeViewBinder extends CheckableNodeViewBinder { 16 | TextView textView; 17 | ImageView imageView; 18 | public ThridLevelNodeViewBinder(View itemView) { 19 | super(itemView); 20 | textView = (TextView) itemView.findViewById(R.id.node_name_view); 21 | imageView = (ImageView) itemView.findViewById(R.id.arrow_img); 22 | } 23 | 24 | @Override 25 | public int getCheckableViewId() { 26 | return R.id.checkBox; 27 | } 28 | 29 | @Override 30 | public int getLayoutId() { 31 | return R.layout.item_thrid_level; 32 | } 33 | 34 | @Override 35 | public void bindView(final TreeNode treeNode) { 36 | textView.setText(treeNode.getValue().toString()); 37 | imageView.setRotation(treeNode.isExpanded() ? 90 : 0); 38 | } 39 | 40 | @Override 41 | public void onNodeToggled(TreeNode treeNode, boolean expand) { 42 | if (expand) { 43 | imageView.animate().rotation(90).setDuration(200).start(); 44 | } else { 45 | imageView.animate().rotation(0).setDuration(200).start(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui2/xloadingdialog/XColorDrawable.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui2.xloadingdialog; 2 | 3 | 4 | import android.graphics.Canvas; 5 | import android.graphics.ColorFilter; 6 | import android.graphics.Paint; 7 | import android.graphics.PixelFormat; 8 | import android.graphics.RectF; 9 | import android.graphics.drawable.Drawable; 10 | import android.support.annotation.ColorInt; 11 | 12 | public class XColorDrawable extends Drawable { 13 | private Paint mPaint; 14 | private int color; 15 | private RectF rectF; 16 | 17 | public XColorDrawable() { 18 | mPaint = new Paint(); 19 | // 是否抗锯齿 20 | mPaint.setAntiAlias(true); 21 | } 22 | 23 | public XColorDrawable(int color) { 24 | this.color = color; 25 | mPaint = new Paint(); 26 | mPaint.setAntiAlias(true); 27 | } 28 | 29 | public void setColor(@ColorInt int color) { 30 | this.color = color; 31 | } 32 | 33 | @Override 34 | public void setBounds(int left, int top, int right, int bottom) { 35 | super.setBounds(left, top, right, bottom); 36 | rectF = new RectF(left, top, right, bottom); 37 | } 38 | 39 | @Override 40 | public void draw(Canvas canvas) { 41 | mPaint.setColor(color); 42 | canvas.drawRoundRect(rectF, 20, 20, mPaint); 43 | } 44 | 45 | @Override 46 | public void setAlpha(int alpha) { 47 | mPaint.setAlpha(alpha); 48 | } 49 | 50 | @Override 51 | public void setColorFilter(ColorFilter colorFilter) { 52 | mPaint.setColorFilter(colorFilter); 53 | } 54 | 55 | @Override 56 | public int getOpacity() { 57 | return PixelFormat.TRANSLUCENT; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/column/ColumnCharActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.column; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.widget.LinearLayoutManager; 5 | import android.support.v7.widget.RecyclerView; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.base.BaseActivity; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | public class ColumnCharActivity extends BaseActivity { 14 | 15 | private RecyclerView mRecyclerView; 16 | private ColumnCharAdapter columnAdapter; 17 | 18 | @Override 19 | protected void onCreate(Bundle savedInstanceState) { 20 | super.onCreate(savedInstanceState); 21 | setContentView(R.layout.activity_column_char); 22 | 23 | mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 24 | LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 25 | linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 26 | mRecyclerView.setLayoutManager(linearLayoutManager); 27 | columnAdapter = new ColumnCharAdapter(this); 28 | mRecyclerView.setAdapter(columnAdapter); 29 | 30 | List list = new ArrayList<>(); 31 | for (int i = 0; i < 10; i++) { 32 | list.add(new ColumnValueBean("第" + i, i * 20)); 33 | } 34 | columnAdapter.setList(list); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/column/ColumnValueBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.column; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 服务满意度属性图值实体类 7 | * Created by cb on 2017/11/20. 8 | */ 9 | 10 | public class ColumnValueBean implements Serializable { 11 | private static final long serialVersionUID = 5025826632618719529L; 12 | 13 | private String bottomName;//底下的服务名称 14 | private int scale;//比例 15 | private String topValue;//上面显示的比例 16 | 17 | public ColumnValueBean(String bottomName, int scale, String topValue) { 18 | this.bottomName = bottomName; 19 | this.scale = scale; 20 | this.topValue = topValue; 21 | } 22 | 23 | public ColumnValueBean(String bottomName, int scale) { 24 | this.bottomName = bottomName; 25 | this.scale = scale; 26 | } 27 | 28 | public String getBottomName() { 29 | return bottomName; 30 | } 31 | 32 | public void setBottomName(String bottomName) { 33 | this.bottomName = bottomName; 34 | } 35 | 36 | public int getScale() { 37 | return scale; 38 | } 39 | 40 | public void setScale(int scale) { 41 | this.scale = scale; 42 | } 43 | 44 | public String getTopValue() { 45 | return topValue; 46 | } 47 | 48 | public void setTopValue(String topValue) { 49 | this.topValue = topValue; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/contacts/ContactsBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.contacts; 2 | 3 | import java.io.Serializable; 4 | import java.util.List; 5 | 6 | /** 7 | * author : caobin 8 | * e-mail : 821651400@qq.com 9 | * time : 2017/12/12 10 | * desc : 11 | */ 12 | public class ContactsBean implements Serializable { 13 | 14 | private String name; 15 | private String headImg; 16 | private List phone; 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | public String getHeadImg() { 27 | return headImg; 28 | } 29 | 30 | public void setHeadImg(String headImg) { 31 | this.headImg = headImg; 32 | } 33 | 34 | public List getCallNum() { 35 | return phone; 36 | } 37 | 38 | public void setCallNum(List callNum) { 39 | this.phone = callNum; 40 | } 41 | 42 | public static class PhoneBean implements Serializable { 43 | private String type; 44 | private String number; 45 | 46 | public String getType() { 47 | return type; 48 | } 49 | 50 | public void setType(String type) { 51 | this.type = type; 52 | } 53 | 54 | public String getNumber() { 55 | return number; 56 | } 57 | 58 | public void setNumber(String number) { 59 | this.number = number; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/contacts/FileResultCallback.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.contacts; 2 | 3 | import java.util.List; 4 | 5 | public interface FileResultCallback { 6 | void onResultCallback(List files); 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/contacts/XContactsActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.contacts; 2 | 3 | import android.Manifest; 4 | import android.os.Bundle; 5 | 6 | import com.example.androidremark.R; 7 | import com.example.androidremark.base.BaseActivity; 8 | import com.example.androidremark.permission.XPermission; 9 | import com.google.gson.Gson; 10 | 11 | import java.util.List; 12 | 13 | public class XContactsActivity extends BaseActivity { 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_contacts); 19 | initView(); 20 | } 21 | 22 | private void initView() { 23 | XPermission.requestPermissions(this, 101, new String[]{Manifest.permission 24 | .READ_CONTACTS}, new XPermission.OnPermissionListener() { 25 | @Override 26 | public void onPermissionGranted() { 27 | new ContactsTask(XContactsActivity.this, new FileResultCallback() { 28 | @Override 29 | public void onResultCallback(List files) { 30 | if (files != null) { 31 | System.err.println("哈哈哈 " + new Gson().toJson(files)); 32 | } 33 | } 34 | }).execute(); 35 | } 36 | 37 | @Override 38 | public void onPermissionDenied() { 39 | } 40 | }); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/AObject.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger; 2 | 3 | import javax.inject.Inject; 4 | 5 | /** 6 | * Created by bin on 2019/1/21. 7 | */ 8 | public class AObject { 9 | 10 | @Inject 11 | public AObject() { 12 | } 13 | 14 | public void eat() { 15 | System.err.println("我是A"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/BObject.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger; 2 | 3 | /** 4 | * Created by bin on 2019/1/21. 5 | */ 6 | public class BObject { 7 | 8 | public BObject() { 9 | } 10 | 11 | public void eat() { 12 | System.err.println("哈哈 我是B"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/DaggerTestActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | 6 | 7 | import com.example.androidremark.R; 8 | 9 | import javax.inject.Inject; 10 | 11 | /** 12 | * ==================================================== 13 | * 14 | * @User :caobin 15 | * @Date :2019/7/26 11:19 16 | * @Desc :Dagger2测试Activity 17 | * ==================================================== 18 | */ 19 | public class DaggerTestActivity extends AppCompatActivity { 20 | 21 | // @Named("AAA") 22 | @Inject 23 | AObject aObject; 24 | 25 | // @Named("bbb") 26 | // @Inject 27 | // AObject aaObject; 28 | 29 | @Inject 30 | BObject bObject; 31 | 32 | 33 | @Override 34 | protected void onCreate(Bundle savedInstanceState) { 35 | super.onCreate(savedInstanceState); 36 | setContentView(R.layout.activity_dagger_test); 37 | initView(); 38 | } 39 | 40 | /** 41 | * 42 | */ 43 | private void initView() { 44 | // 45 | DaggerMainComponent.builder() 46 | .mainModule(new MainModule()) 47 | .build() 48 | .inject(this); 49 | aObject.eat(); 50 | bObject.eat(); 51 | 52 | // aaObject.eat(); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/MainComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger; 2 | 3 | import dagger.Component; 4 | 5 | /** 6 | * 康跑能 7 | * Created by bin on 2019/1/21. 8 | * 第一步 添加@Component 9 | * 第二部 添加module 10 | */ 11 | //@Singleton 表示单例,一个对象如果存在就不会再去创建了 12 | @Component(modules = {MainModule.class}) 13 | public interface MainComponent { 14 | //第三步 绑定activity 15 | void inject(DaggerTestActivity activity); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/MainModule.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger; 2 | 3 | 4 | import dagger.Module; 5 | import dagger.Provides; 6 | 7 | /** 8 | * Created by bin on 2019/1/21. 9 | */ 10 | @Module//第一步生成Module 11 | public class MainModule { 12 | //第二步 使用provider 注解实例化对象 13 | //一个完整的Module必须拥有@Module和@Provides 14 | // @Provides 15 | // AObject providerA() { 16 | // return new AObject(); 17 | // } 18 | 19 | 20 | // @Singleton 表示单例 component必须也要指定@Singleton 21 | @Provides 22 | BObject providerB() { 23 | return new BObject(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/a/CarA.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.a; 2 | 3 | import javax.inject.Inject; 4 | 5 | /** 6 | * ==================================================== 7 | * 8 | * @User :caobin 9 | * @Date :2020/3/24 11:03 10 | * @Desc :汽车 11 | * ==================================================== 12 | */ 13 | public class CarA { 14 | 15 | /** 16 | * @Inject:@Inject 标记需要依赖的变量,告诉Dagger2为它提供依赖 17 | */ 18 | @Inject 19 | EngineA mEngineA; 20 | 21 | public CarA() { 22 | DaggerCarComponent.builder() 23 | .build().inject(this); 24 | } 25 | 26 | private EngineA getEngine() { 27 | return mEngineA; 28 | } 29 | 30 | public static void main(String[] args) { 31 | //第一种方式 构造方法和成员变量都要使用@Inject来注解 32 | CarA carA = new CarA(); 33 | carA.getEngine().run(); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/a/CarComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.a; 2 | 3 | import dagger.Component; 4 | 5 | /** 6 | * ==================================================== 7 | * 8 | * @User :caobin 9 | * @Date :2020/3/24 11:05 10 | * @Desc :Component 可以理解为注射器 将需要注入的变量初始化后注入需要的使用的地方 11 | * ==================================================== 12 | */ 13 | @Component 14 | public interface CarComponent { 15 | void inject(CarA car); 16 | 17 | //用于标注接口,是依赖需求方和依赖提供方之间的桥梁。被Component标注的接口在编译时会生成该接口的实现类 18 | // (如果@Component标注的接口为CarComponent,则编译期生成的实现类为DaggerCarComponent),我们通过调用这个实现类的方法完成注入; 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/a/EngineA.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.a; 2 | 3 | import javax.inject.Inject; 4 | 5 | /** 6 | * ==================================================== 7 | * 8 | * @User :caobin 9 | * @Date :2020/3/24 10:58 10 | * @Desc :引擎 11 | * ==================================================== 12 | */ 13 | public class EngineA { 14 | 15 | /** 16 | * Dagger2通过@Inject注解在需要这个类的实例的时候,来找到这个类的构造方法并实例化出来 17 | * 以此来为被@Inject标记得变量提供依赖(这种方式构造方法不能有参数) 18 | */ 19 | @Inject 20 | public EngineA() { 21 | } 22 | 23 | private String name; 24 | 25 | 26 | public String getName() { 27 | return name; 28 | } 29 | 30 | public void setName(String name) { 31 | this.name = name; 32 | } 33 | 34 | @Override 35 | public String toString() { 36 | return "Engine{" + 37 | "name='" + name + '\'' + 38 | '}'; 39 | } 40 | 41 | public void run() { 42 | System.out.println("引擎转起来了~~~"); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/b/CarComponentB.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.b; 2 | 3 | import dagger.Component; 4 | 5 | /** 6 | * ==================================================== 7 | * 8 | * @User :caobin 9 | * @Date :2020/3/24 11:05 10 | * @Desc :Component 可以理解为注射器 将需要注入的变量初始化后注入需要的使用的地方 11 | * ==================================================== 12 | */ 13 | @Component(modules = CarModuleB.class) 14 | public interface CarComponentB { 15 | void inject(CarB car); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/b/CarModuleB.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.b; 2 | 3 | import javax.inject.Named; 4 | 5 | import dagger.Module; 6 | import dagger.Provides; 7 | 8 | /** 9 | * ==================================================== 10 | * 11 | * @User :caobin 12 | * @Date :2020/3/24 11:40 13 | * @Desc :Module 14 | * ==================================================== 15 | */ 16 | @Module 17 | public class CarModuleB { 18 | 19 | 20 | public CarModuleB() { 21 | } 22 | 23 | /** 24 | * 必须使用@Name注解来标注不同的Provider 25 | */ 26 | 27 | @Named("provider1") 28 | @Provides 29 | EngineB providerEngineB1() { 30 | return new EngineB("我是参数"); 31 | } 32 | 33 | @Named("provider2") 34 | @Provides 35 | EngineB providerEngineB2() { 36 | return new EngineB(); 37 | } 38 | 39 | 40 | //*****************另一种实现******************// 41 | @EngineB.QualifierA 42 | @Provides 43 | EngineB providerEngineB3() { 44 | return new EngineB("我是参数-QualifierA"); 45 | } 46 | 47 | @EngineB.QualifierB 48 | @Provides 49 | EngineB providerEngineB4() { 50 | return new EngineB(); 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/b/EngineB.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.b; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Qualifier; 7 | 8 | /** 9 | * ==================================================== 10 | * 11 | * @User :caobin 12 | * @Date :2020/3/24 10:58 13 | * @Desc :引擎 14 | * ==================================================== 15 | */ 16 | public class EngineB { 17 | 18 | /** 19 | * Dagger2通过@Inject注解在需要这个类的实例的时候,来找到这个类的构造方法并实例化出来 20 | * 以此来为被@Inject标记得变量提供依赖 21 | */ 22 | 23 | @Qualifier 24 | @Retention(RetentionPolicy.RUNTIME) 25 | public @interface QualifierA { 26 | } 27 | 28 | @Qualifier 29 | @Retention(RetentionPolicy.RUNTIME) 30 | public @interface QualifierB { 31 | } 32 | 33 | 34 | public EngineB() { 35 | } 36 | 37 | public EngineB(String name) { 38 | this.name = name; 39 | } 40 | 41 | private String name = ""; 42 | 43 | public String getName() { 44 | return name; 45 | } 46 | 47 | public void setName(String name) { 48 | this.name = name; 49 | } 50 | 51 | @Override 52 | public String toString() { 53 | return "Engine{" + 54 | "name='" + name + '\'' + 55 | '}'; 56 | } 57 | 58 | public void run() { 59 | System.out.println("引擎B转起来了~~~" + name); 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/c/CarC.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.c; 2 | 3 | import javax.inject.Inject; 4 | 5 | /** 6 | * ==================================================== 7 | * 8 | * @User :caobin 9 | * @Date :2020/3/24 11:03 10 | * @Desc :汽车 11 | * ==================================================== 12 | */ 13 | public class CarC { 14 | 15 | @Inject 16 | EngineC mEngineC; 17 | 18 | @Inject 19 | EngineC mEngineC2; 20 | 21 | public CarC() { 22 | DaggerCarComponentC.builder() 23 | .carModuleC(new CarModuleC()) 24 | .build().inject(this); 25 | } 26 | 27 | private EngineC getEngine() { 28 | return mEngineC; 29 | } 30 | 31 | private EngineC getEngine2() { 32 | return mEngineC2; 33 | } 34 | 35 | public static void main(String[] args) { 36 | CarC car = new CarC(); 37 | 38 | System.err.println(car.getEngine()); 39 | System.err.println(car.getEngine2()); 40 | 41 | // car.getEngine().run(); 42 | // car.getEngine2().run(); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/c/CarComponentC.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.c; 2 | 3 | import dagger.Component; 4 | 5 | /** 6 | * ==================================================== 7 | * 8 | * @User :caobin 9 | * @Date :2020/3/24 11:05 10 | * @Desc :Component 可以理解为注射器 将需要注入的变量初始化后注入需要的使用的地方 11 | * 3. 同时还需要使用@Scope去标注注入器Compoent 12 | * ==================================================== 13 | */ 14 | @EngineC.CarScope 15 | @Component(modules = CarModuleC.class) 16 | public interface CarComponentC { 17 | void inject(CarC car); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/c/CarModuleC.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.c; 2 | 3 | import dagger.Module; 4 | import dagger.Provides; 5 | 6 | /** 7 | * ==================================================== 8 | * 9 | * @User :caobin 10 | * @Date :2020/3/24 11:40 11 | * @Desc :Module 12 | * ==================================================== 13 | */ 14 | @Module 15 | public class CarModuleC { 16 | 17 | 18 | public CarModuleC() { 19 | } 20 | 21 | /** 22 | * 2. @CarScope去标记依赖提供方MarkCarModule 23 | */ 24 | @Provides 25 | @EngineC.CarScope 26 | EngineC providerEngineC() { 27 | return new EngineC("我是参数"); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/dagger/c/EngineC.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.dagger.c; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Scope; 7 | 8 | /** 9 | * ==================================================== 10 | * 11 | * @User :caobin 12 | * @Date :2020/3/24 10:58 13 | * @Desc :引擎 14 | * ==================================================== 15 | */ 16 | public class EngineC { 17 | 18 | /** 19 | * 用于自定义注解,通过@Scope自定义注解来限定注解的作用域,实现局部的单例 20 | * 1.用@Scope定义一个CarScope注解 21 | */ 22 | @Scope 23 | @Retention(RetentionPolicy.RUNTIME) 24 | public @interface CarScope { 25 | 26 | } 27 | 28 | public EngineC(String name) { 29 | this.name = name; 30 | System.out.println("EngineC create: " + name); 31 | } 32 | 33 | private String name = ""; 34 | 35 | public String getName() { 36 | return name; 37 | } 38 | 39 | public void setName(String name) { 40 | this.name = name; 41 | } 42 | 43 | @Override 44 | public String toString() { 45 | return "Engine{" + 46 | "name='" + name + '\'' + 47 | '}'; 48 | } 49 | 50 | public void run() { 51 | System.out.println("引擎C转起来了~~~" + name); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/drag/CustomPointF.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.drag; 2 | 3 | import android.graphics.Canvas; 4 | import android.graphics.Paint; 5 | import android.graphics.PointF; 6 | 7 | /** 8 | * @author: cb 9 | * @date: 2024/3/29 11:31 10 | * @desc: 描述 11 | */ 12 | public class CustomPointF { 13 | private PointF point; 14 | private int circleRadius; 15 | private int circleColor; 16 | private int textColor; 17 | 18 | public CustomPointF(PointF point, int circleRadius, int circleColor, int textColor) { 19 | this.point = point; 20 | this.circleRadius = circleRadius; 21 | this.circleColor = circleColor; 22 | this.textColor = textColor; 23 | } 24 | 25 | public void draw(Canvas canvas, Paint paint, int number) { 26 | paint.setStyle(Paint.Style.FILL_AND_STROKE); 27 | paint.setColor(circleColor); 28 | canvas.drawCircle(point.x, point.y, circleRadius, paint); 29 | 30 | paint.setColor(textColor); 31 | paint.setTextSize(circleRadius); 32 | paint.setTextAlign(Paint.Align.CENTER); 33 | canvas.drawText(String.valueOf(number), point.x, point.y + (circleRadius / 2), paint); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/drag/DragActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.drag; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.example.androidremark.R; 7 | import com.example.androidremark.base.BaseActivity; 8 | 9 | /** 10 | * @author: cb 11 | * @date: 2024/3/11 12:02 12 | * @desc: 描述 13 | */ 14 | public class DragActivity extends BaseActivity { 15 | 16 | @Override 17 | protected void onCreate(@Nullable Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_drag); 20 | 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/eventBus/EventBusBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.eventBus; 2 | 3 | /** 4 | * author : caobin 5 | * e-mail : 821651400@qq.com 6 | * time : 2017/12/28 7 | * desc : 8 | */ 9 | public class EventBusBean { 10 | private String name; 11 | 12 | public EventBusBean(String name) { 13 | this.name = name; 14 | } 15 | 16 | public String getName() { 17 | return name; 18 | } 19 | 20 | public void setName(String name) { 21 | this.name = name; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/eventBus/EventbusActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.eventBus; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | import android.widget.TextView; 6 | 7 | import com.example.androidremark.R; 8 | import com.example.androidremark.base.BaseActivity; 9 | 10 | import org.greenrobot.eventbus.EventBus; 11 | import org.greenrobot.eventbus.Subscribe; 12 | import org.greenrobot.eventbus.ThreadMode; 13 | 14 | public class EventbusActivity extends BaseActivity { 15 | 16 | @Override 17 | protected void onCreate(Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_eventbus); 20 | EventBus.getDefault().register(this); 21 | initView(); 22 | } 23 | 24 | private void initView() { 25 | 26 | } 27 | 28 | @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) 29 | public void onMessageEvent(EventBusBean event) { 30 | /* Do something */ 31 | System.err.println("哈哈 " + event.getName()); 32 | // ((TextView) findViewById(R.id.text)).setText(event.getName()); 33 | } 34 | 35 | public void send(View view) { 36 | 37 | } 38 | 39 | @Override 40 | protected void onDestroy() { 41 | super.onDestroy(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/group/BaseGroupBean.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.group; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * Created by cb on 2017/12/1. 7 | */ 8 | 9 | public class BaseGroupBean implements Serializable { 10 | 11 | public static final int typeGroup = 0; 12 | public static final int typeChild = 1; 13 | 14 | private int type; 15 | private String title; 16 | 17 | public BaseGroupBean(int type, String title) { 18 | this.type = type; 19 | this.title = title; 20 | } 21 | 22 | public int getType() { 23 | return type; 24 | } 25 | 26 | public void setType(int type) { 27 | this.type = type; 28 | } 29 | 30 | public String getTitle() { 31 | return title; 32 | } 33 | 34 | public void setTitle(String title) { 35 | this.title = title; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/group/StickyHeaderAdapter.java: -------------------------------------------------------------------------------- 1 | 2 | 3 | package com.example.androidremark.ui3.group; 4 | 5 | import android.content.Context; 6 | import android.support.v7.widget.RecyclerView; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.TextView; 11 | 12 | import com.example.androidremark.R; 13 | 14 | 15 | /** 16 | * 悬浮headerAdapter 17 | */ 18 | public class StickyHeaderAdapter implements StickyHeaderDecoration.IStickyHeaderAdapter { 19 | 20 | private LayoutInflater mInflater; 21 | 22 | public StickyHeaderAdapter(Context context) { 23 | mInflater = LayoutInflater.from(context); 24 | } 25 | 26 | @Override 27 | public long getHeaderId(int position) { 28 | return position / 3; 29 | } 30 | 31 | @Override 32 | public HeaderHolder onCreateHeaderViewHolder(ViewGroup parent) { 33 | final View view = mInflater.inflate(R.layout.header_item, parent, false); 34 | return new HeaderHolder(view); 35 | } 36 | 37 | @Override 38 | public void onBindHeaderViewHolder(HeaderHolder viewholder, int position) { 39 | viewholder.header.setText("第" + getHeaderId(position) + "组"); 40 | } 41 | 42 | class HeaderHolder extends RecyclerView.ViewHolder { 43 | public TextView header; 44 | 45 | public HeaderHolder(View itemView) { 46 | super(itemView); 47 | header = (TextView) itemView; 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/photocropper/CropListener.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.photocropper; 2 | 3 | import android.graphics.Bitmap; 4 | 5 | /** 6 | * @author: cb 7 | * @date: 2024/3/29 8 | * @desc: 描述 9 | */ 10 | public interface CropListener { 11 | 12 | void onFinish(Bitmap bitmap); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/photocropper/CropPosition.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.photocropper; 2 | 3 | /** 4 | * @author: cb 5 | * @date: 2024/3/29 16:43 6 | * @desc: 描述 7 | */ 8 | public enum CropPosition { 9 | TOP_LEFT, 10 | TOP_RIGHT, 11 | BOTTOM_LEFT, 12 | BOTTOM_RIGHT, 13 | UNKNOWN 14 | } 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/photocropper/DotsPosition.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.photocropper 2 | 3 | /** 4 | * @author: cb 5 | * @date: 2024/3/29 6 | * @desc: 点的位置标记 7 | */ 8 | annotation class DotsPosition { 9 | 10 | companion object { 11 | const val TOP_LEFT = 1 12 | const val TOP_RIGHT = 2 13 | const val BOTTOM_LEFT = 3 14 | const val BOTTOM_RIGHT = 4 15 | const val TOP_CENTER = 6 16 | const val BOTTOM_CENTER = 7 17 | const val UNKNOWN = -1 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/photocropper/PhotocropperActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.photocropper; 2 | 3 | import android.os.Bundle; 4 | import android.support.annotation.Nullable; 5 | 6 | import com.example.androidremark.R; 7 | import com.example.androidremark.base.BaseActivity; 8 | 9 | /** 10 | * @author: cb 11 | * @date: 2024/3/11 12:02 12 | * @desc: 描述 13 | */ 14 | public class PhotocropperActivity extends BaseActivity { 15 | 16 | @Override 17 | protected void onCreate(@Nullable Bundle savedInstanceState) { 18 | super.onCreate(savedInstanceState); 19 | setContentView(R.layout.activity_photocropper); 20 | 21 | StandJumpRangeView view = findViewById(R.id.drag_view); 22 | 23 | view.setData(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/pwd/PwdInputActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.pwd; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | 6 | import com.example.androidremark.R; 7 | 8 | /** 9 | * 密码输入框 10 | */ 11 | public class PwdInputActivity extends AppCompatActivity { 12 | 13 | @Override 14 | protected void onCreate(Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | setContentView(R.layout.activity_pwd_input); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/stickscroll/StickScrollViewActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.stickscroll; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.example.androidremark.R; 6 | import com.example.androidremark.base.BaseActivity; 7 | 8 | public class StickScrollViewActivity extends BaseActivity { 9 | 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_stick_scroll_view); 14 | initView(); 15 | } 16 | 17 | private void initView() { 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/tantan/CardConfig.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.tantan; 2 | 3 | import android.content.Context; 4 | import android.util.TypedValue; 5 | 6 | /** 7 | * ==================================================== 8 | * 9 | * @User :caobin 10 | * @Date :2020/6/17 23:13 11 | * @Desc : 12 | * ==================================================== 13 | */ 14 | public class CardConfig { 15 | //屏幕上最多同时显示几个Item 16 | public static int MAX_SHOW_COUNT; 17 | 18 | //每一级Scale相差0.05f,translationY相差7dp左右 19 | public static float SCALE_GAP; 20 | public static int TRANS_Y_GAP; 21 | 22 | public static void initConfig(Context context) { 23 | MAX_SHOW_COUNT = 4; 24 | SCALE_GAP = 0.05f; 25 | TRANS_Y_GAP = (int) TypedValue.applyDimension( 26 | TypedValue.COMPLEX_UNIT_DIP, 15, 27 | context.getResources().getDisplayMetrics() 28 | ); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/ui3/viewpager/ViewPagerActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.ui3.viewpager; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.example.androidremark.R; 6 | import com.example.androidremark.base.BaseActivity; 7 | 8 | public class ViewPagerActivity extends BaseActivity { 9 | 10 | @Override 11 | protected void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | setContentView(R.layout.activity_view_pager); 14 | initView(); 15 | } 16 | 17 | private void initView() { 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/utils/ColorUtil.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.utils; 2 | 3 | import android.graphics.Color; 4 | import android.graphics.Paint; 5 | 6 | /** 7 | * Created by MQ on 2017/5/18. 8 | */ 9 | 10 | public class ColorUtil { 11 | /** 12 | * 根据数据位置来给Paint循环设置颜色 13 | * 14 | * @param mPaint Paint 15 | * @param position position 16 | */ 17 | public static void setPaintColor(Paint mPaint, int position) { 18 | int pos = position % 6; 19 | switch (pos) { 20 | case 0: 21 | mPaint.setColor(Color.parseColor("#EC5745")); 22 | break; 23 | case 1: 24 | mPaint.setColor(Color.parseColor("#377caf")); 25 | break; 26 | case 2: 27 | mPaint.setColor(Color.parseColor("#4ebcd3")); 28 | break; 29 | case 3: 30 | mPaint.setColor(Color.parseColor("#6fb30d")); 31 | break; 32 | case 4: 33 | mPaint.setColor(Color.parseColor("#FFA500")); 34 | break; 35 | case 5: 36 | mPaint.setColor(Color.parseColor("#bf9e5a")); 37 | break; 38 | } 39 | } 40 | } 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/utils/StatusBarView.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.utils; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | 7 | /** 8 | * Created by Jaeger on 16/6/8. 9 | * 10 | * Email: chjie.jaeger@gmail.com 11 | * GitHub: https://github.com/laobie 12 | */ 13 | public class StatusBarView extends View { 14 | public StatusBarView(Context context, AttributeSet attrs) { 15 | super(context, attrs); 16 | } 17 | 18 | public StatusBarView(Context context) { 19 | super(context); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/view/NoScrollGridView.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.view; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View.MeasureSpec; 6 | import android.widget.GridView; 7 | 8 | /** 9 | * Created by cb on 2017/10/26. 10 | */ 11 | 12 | public class NoScrollGridView extends GridView { 13 | public NoScrollGridView(Context var1, AttributeSet var2) { 14 | super(var1, var2); 15 | } 16 | 17 | public NoScrollGridView(Context var1) { 18 | super(var1); 19 | } 20 | 21 | public NoScrollGridView(Context var1, AttributeSet var2, int var3) { 22 | super(var1, var2, var3); 23 | } 24 | 25 | public void onMeasure(int var1, int var2) { 26 | int var3 = MeasureSpec.makeMeasureSpec(536870911, -2147483648); 27 | super.onMeasure(var1, var3); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/watermask/StickerMoveHelper.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.watermask 2 | 3 | import android.graphics.Matrix 4 | import android.view.MotionEvent 5 | import android.view.View 6 | 7 | class StickerMoveHelper(view: View) { 8 | 9 | private var mView: View? = null 10 | private var mX: Float = 0F 11 | private var mY: Float = 0F 12 | private val M = Matrix() 13 | 14 | init { 15 | this.mView = view 16 | } 17 | 18 | fun onTouch(v: View, event: MotionEvent): Boolean { 19 | when (event.actionMasked) { 20 | MotionEvent.ACTION_DOWN -> { 21 | mX = event.x 22 | mY = event.y 23 | M.reset() 24 | M.setRotate(v.rotation) 25 | return true 26 | } 27 | MotionEvent.ACTION_MOVE -> { 28 | val dxy = floatArrayOf(event.x - mX, event.y - mY) 29 | M.mapPoints(dxy) 30 | v.translationX = mView!!.translationX + dxy[0] 31 | v.translationY = mView!!.translationY + dxy[1] 32 | return true 33 | } 34 | } 35 | return false 36 | } 37 | 38 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/watermask/WaterMarkImageView.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.watermask 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.View 6 | import android.widget.ImageView 7 | import com.example.androidremark.R 8 | 9 | open class WaterMarkImageView : WaterMarkStickerView { 10 | 11 | private var mImageView: ImageView? = null 12 | 13 | constructor(context: Context) : this(context, null) 14 | constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) 15 | constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) 16 | 17 | override fun onCreateContentView(context: Context): View { 18 | mImageView = ImageView(context) 19 | mImageView!!.setImageResource(R.mipmap.ic_launcher) 20 | return mImageView!! 21 | } 22 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/watermask/impl/WaterMarkStickerImpl.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.watermask.impl 2 | 3 | /** 4 | * 水印抽象成接口 5 | */ 6 | interface WaterMarkStickerImpl : WatermarkAction, WatermarkInfo { 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/watermask/impl/WatermarkAction.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.watermask.impl 2 | 3 | import android.graphics.Canvas 4 | import android.graphics.RectF 5 | 6 | /** 7 | * 抽象水印的行为 8 | */ 9 | interface WatermarkAction { 10 | 11 | fun show(): Boolean 12 | 13 | fun remove(): Boolean 14 | 15 | fun dismiss(): Boolean 16 | 17 | fun isShowing(): Boolean 18 | 19 | fun getFrame(): RectF 20 | 21 | fun onSticker(canvas: Canvas) 22 | 23 | fun registerCallback(callback: WatermarkCallback) 24 | 25 | fun unregisterCallback(callback: WatermarkCallback) 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/watermask/impl/WatermarkCallback.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.watermask.impl 2 | 3 | import android.view.View 4 | 5 | /** 6 | * 水印显示显示回调 7 | */ 8 | interface WatermarkCallback { 9 | 10 | fun onDismiss(stickerView: V) where V : WaterMarkStickerImpl 11 | 12 | fun onShowing(stickerView: V) where V : WaterMarkStickerImpl 13 | 14 | fun onRemove(stickerView: V): Boolean where V : WaterMarkStickerImpl 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/watermask/impl/WatermarkInfo.kt: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.watermask.impl 2 | 3 | /** 4 | * 水印的信息 5 | */ 6 | interface WatermarkInfo { 7 | 8 | fun getWidth(): Int 9 | 10 | fun getHeight(): Int 11 | 12 | fun getRotation(): Float 13 | 14 | fun getPivotX(): Float 15 | 16 | fun getPivotY(): Float 17 | 18 | fun getX(): Float 19 | 20 | fun getY(): Float 21 | 22 | fun getScale(): Float 23 | 24 | fun setScale(scale: Float) 25 | 26 | fun addScale(scale: Float) 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/widget/swipe_menu/MyDividerDecoration.java: -------------------------------------------------------------------------------- 1 | package com.example.androidremark.widget.swipe_menu; 2 | 3 | import android.graphics.Rect; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.view.View; 6 | 7 | /** 8 | * Created by MQ on 2017/6/11. 9 | */ 10 | 11 | public class MyDividerDecoration extends RecyclerView.ItemDecoration { 12 | @Override 13 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 14 | // super.getItemOffsets(outRect, view, parent, state); 15 | outRect.set(0, 0, 0, 2); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/widget/tree/base/BaseNodeViewFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 - 2017 ShineM (Xinyuan) 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 5 | * file except in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the 10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 11 | * ANY KIND, either express or implied. See the License for the specific language governing 12 | * permissions and limitations under. 13 | */ 14 | 15 | package com.example.androidremark.widget.tree.base; 16 | 17 | import android.view.View; 18 | 19 | /** 20 | * Created by zxy on 17/4/23. 21 | */ 22 | 23 | public abstract class BaseNodeViewFactory { 24 | 25 | /** 26 | * If you want build a tree view,you must implement this factory method 27 | * 28 | * @param view The parameter for BaseNodeViewBinder's constructor, do not use this for other 29 | * purpose! 30 | * @param level The treeNode level 31 | * @return 32 | */ 33 | public abstract BaseNodeViewBinder getNodeViewBinder(View view, int level); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/widget/tree/base/BaseTreeAction.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 - 2017 ShineM (Xinyuan) 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 5 | * file except in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the 10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 11 | * ANY KIND, either express or implied. See the License for the specific language governing 12 | * permissions and limitations under. 13 | */ 14 | 15 | package com.example.androidremark.widget.tree.base; 16 | 17 | 18 | import com.example.androidremark.widget.tree.TreeNode; 19 | 20 | import java.util.List; 21 | 22 | 23 | /** 24 | * Created by caobin on 2017/4/20. 25 | */ 26 | 27 | public interface BaseTreeAction { 28 | void expandAll(); 29 | 30 | void expandNode(TreeNode treeNode); 31 | 32 | void expandLevel(int level); 33 | 34 | void collapseAll(); 35 | 36 | void collapseNode(TreeNode treeNode); 37 | 38 | void collapseLevel(int level); 39 | 40 | void toggleNode(TreeNode treeNode); 41 | 42 | void deleteNode(TreeNode node); 43 | 44 | void addNode(TreeNode parent, TreeNode treeNode); 45 | 46 | List getAllNodes(); 47 | 48 | // TODO: 17/4/30 49 | // 1.add node at position 50 | // 2.add slide delete or other operations 51 | 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/widget/tree/base/CheckableNodeViewBinder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 - 2017 ShineM (Xinyuan) 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 5 | * file except in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the 10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 11 | * ANY KIND, either express or implied. See the License for the specific language governing 12 | * permissions and limitations under. 13 | */ 14 | 15 | package com.example.androidremark.widget.tree.base; 16 | 17 | import android.view.View; 18 | 19 | import com.example.androidremark.widget.tree.TreeNode; 20 | 21 | 22 | /** 23 | * Created by caobin on 2017/4/27. 24 | */ 25 | 26 | public abstract class CheckableNodeViewBinder extends BaseNodeViewBinder { 27 | 28 | public CheckableNodeViewBinder(View itemView) { 29 | super(itemView); 30 | } 31 | 32 | /** 33 | * Get the checkable view id. MUST BE A CheckBox CLASS! 34 | * 35 | * @return 36 | */ 37 | public abstract int getCheckableViewId(); 38 | 39 | /** 40 | * Do something when a node select or deselect(only triggered by clicked) 41 | * 42 | * @param treeNode 43 | * @param selected 44 | */ 45 | public void onNodeSelectedChanged(TreeNode treeNode, boolean selected) { 46 | /*empty*/ 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/androidremark/widget/tree/base/SelectableTreeAction.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 - 2017 ShineM (Xinyuan) 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this 5 | * file except in compliance with the License. You may obtain a copy of the License at 6 | * 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * 9 | * Unless required by applicable law or agreed to in writing, software distributed under the 10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF 11 | * ANY KIND, either express or implied. See the License for the specific language governing 12 | * permissions and limitations under. 13 | */ 14 | 15 | package com.example.androidremark.widget.tree.base; 16 | 17 | 18 | import com.example.androidremark.widget.tree.TreeNode; 19 | 20 | import java.util.List; 21 | 22 | 23 | /** 24 | * Created by caobin on 2017/4/27. 25 | */ 26 | 27 | public interface SelectableTreeAction extends BaseTreeAction { 28 | void selectNode(TreeNode treeNode); 29 | 30 | void deselectNode(TreeNode treeNode); 31 | 32 | void selectAll(); 33 | 34 | void deselectAll(); 35 | 36 | List getSelectedNodes(); 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alerter_pulse.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alerter_slide_in_from_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/alerter_slide_out_to_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/anim/interpolator_slight_anticipate.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/anim/interpolator_slight_overshoot.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_bottom_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_bottom_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_scale_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_scale_left_in.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_scale_left_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_scale_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_scale_right_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/anim/push_scale_right_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/a.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/adapter_loading_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/adapter_loading_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/adapter_loading_no_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/adapter_loading_no_data.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/app_logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/avatar1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/avatar1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/avatar2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/avatar2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/b.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/banner_grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/banner_grey.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/banner_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/banner_red.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/bg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_girl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/bg_girl.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_monkey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/bg_monkey.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/bg_monkey_king.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/bg_monkey_king.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_top_arrow_back_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/btn_top_arrow_back_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/c.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/d.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/e.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_avatar.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_favorite.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_gavel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_gavel.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_grade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_grade.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_gray_t1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_gray_t1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_gray_t2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_gray_t2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_gray_t3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_gray_t3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_gray_t4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_gray_t4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_gray_t5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_gray_t5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_group_work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_group_work.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_lower_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_lower_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_next_month.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_next_month.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_pre_month.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_pre_month.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_up_blue_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_up_blue_arrow.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_withe_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_withe_light.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_yellow_t1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_yellow_t1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_yellow_t2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_yellow_t2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_yellow_t3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_yellow_t3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_yellow_t4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_yellow_t4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_yellow_t5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/ic_yellow_t5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/mark_pic_normal.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/mark_pic_normal.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/nav_header_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/nav_header_bg.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/photo1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/photo1.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/photo2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/photo2.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/photo3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/photo3.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/photo4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/photo4.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/query_icon_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/query_icon_normal.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/x_loading_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/x_loading_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/x_loading_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/x_loading_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/x_loading_no_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/caobin821651400/Study/cea845dfb04ba09b9082a65d87b856cf8055b57c/app/src/main/res/drawable-xhdpi/x_loading_no_network.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/alerter_ic_face.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/alerter_ic_notifications.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/checked_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/dialogui_selector_left_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_right_white_24px.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_gallery.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_manage.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_send.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_menu_slideshow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_thumb_circular.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/indicator_bg_normal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/indicator_bg_select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/normal_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/popup_grey_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/popup_item_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/progress_vertical.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/seek_bar_withe.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_txt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_gradient_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/tag_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/text_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/x_loading_btn_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_base_group_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_base_recycler.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 13 | 14 | 18 | 19 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_calendar.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_camera.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 |