该项目为基于Kotlin与Java开发的FengYunWeather天气应用设计源码,总计包含657个文件,涵盖292个PNG图片、129个XML配置、118个Kotlin源代码、33个Java源代码、20个GIF图片、13个JPG图片、10个JAR包、8个Gradle构建脚本、6个Git忽略规则和6个Markdown文档。更多信息可参考简书文章链接:https://www.jianshu.com/p/da1671822e88,以及GitHub项目仓库:https://github.com/wdsqjq/FengYunWeather。
关键词
Kotlin开发 Java混合开发 天气应用开源项目 风云天气 应用源码
目录结构
├── .gitignore ├── LICENSE ├── app ├── .gitignore ├── build.gradle ├── libs ├── AMap_Location_V5.3.1_20210331.jar ├── open_sdk_3.5.11.6_r13b47b7_lite.jar ├── proguard-rules.pro ├── release ├── fengyun-weather-2.0.5.apk ├── fengyun-weather-2.0.6.apk ├── fengyun-weather-2.0.7.apk ├── fengyun-weather-2.0.8.apk ├── output-metadata.json ├── src ├── androidTest ├── java ├── me ├── wsj ├── fengyun ├── ExampleInstrumentedTest.kt ├── main ├── AndroidManifest.xml ├── assets ├── widget_clock.ttf ├── ic_launcher-playstore.png ├── java ├── me ├── wsj ├── fengyun ├── MyApp.kt ├── adapter ├── CityManagerAdapter.kt ├── Forecast15dAdapter.kt ├── Forecast3dAdapter.kt ├── MyItemTouchHelper.kt ├── SearchAdapter.kt ├── TopCityAdapter.kt ├── ViewPagerAdapter.kt ├── bean ├── AirNow.kt ├── CityBean.kt ├── ForestBean.kt ├── LifeIndicator.kt ├── Location.kt ├── SearchCity.kt ├── TempUnit.kt ├── UserInfoBean.kt ├── VersionBean.kt ├── WarningBean.kt ├── WeatherHourly.kt ├── WeatherNow.kt ├── db ├── AppDatabase.kt ├── AppRepo.kt ├── dao ├── CacheDao.kt ├── CityDao.kt ├── entity ├── CacheEntity.kt ├── CityEntity.kt ├── dialog ├── AlarmDialog.kt ├── ChangeCityDialog.kt ├── UpgradeDialog.kt ├── receiver ├── BootCompleteReceiver.kt ├── service ├── WidgetService.kt ├── ui ├── activity ├── AboutActivity.kt ├── AddCityActivity.kt ├── CityManagerActivity.kt ├── FeedBackActivity.kt ├── HomeActivity.kt ├── LoginActivity.kt ├── SettingsActivity.kt ├── SplashActivity.kt ├── ThemeActivity.kt ├── UserInfoActivity.kt ├── vm ├── CityManagerViewModel.kt ├── FeedBackViewModel.kt ├── LoginViewModel.kt ├── MainViewModel.kt ├── SearchViewModel.kt ├── ThemeViewModel.kt ├── base ├── BaseActivity.java ├── BaseFragment.java ├── BaseViewModel.kt ├── BaseVmActivity.java ├── BaseVmFragment.java ├── CreateInit.kt ├── fragment ├── PermissionFragment.kt ├── SettingsFragment.kt ├── WeatherFragment.kt ├── vm ├── WeatherViewModel.kt ├── utils ├── ContentUtil.kt ├── Lunar.java ├── NotificationUtil.java ├── RomUtil.java ├── TencentUtil.kt ├── view ├── AirConditionView.kt ├── BindBottomLayout.kt ├── MyProgressBar.kt ├── MyRecyclerView.kt ├── TempChart.kt ├── horizonview ├── HourlyForecastView.java ├── HourlyForecastView2.java ├── IndexHorizontalScrollView.java ├── ScrollWatcher.kt ├── plugin ├── PluginImageView.kt ├── skyview ├── SunView.java ├── titanic ├── TitanicTextView.java ├── widget ├── WeatherWidget.kt ├── res ├── anim ├── bottom_in.xml ├── slide_left_in.xml ├── slide_left_out.xml ├── slide_right_in.xml ├── slide_right_out.xml ├── top_out.xml ├── drawable-nodpi ├── wave.png ├── drawable-v24 ├── ic_launcher_foreground.xml ├── drawable-xhdpi ├── ic_avatar_default.webp ├── drawable-xxhdpi ├── icon_100.png ├── icon_add_city.png ├── icon_loc.png ├── icon_moon.png ├── icon_set.png ├── icon_sun.png ├── welcome_bg.webp ├── drawable ├── air_condition_bg.xml ├── background.xml ├── disable.png ├── enable.png ├── ic_about.xml ├── ic_air_condition.xml ├── ic_arrow_right.xml ├── ic_city.xml ├── ic_close.xml ├── ic_delete.xml ├── ic_drag.xml ├── ic_feek_back.xml ├── ic_hua.xml ├── ic_indicator_car.xml ├── ic_indicator_cold.xml ├── ic_indicator_drying.xml ├── ic_indicator_sport.xml ├── ic_indicator_uv.xml ├── ic_indicator_wear.xml ├── ic_launcher_foreground.xml ├── ic_location.xml ├── ic_qq_login.xml ├── ic_search.xml ├── ic_she.xml ├── ic_theme.xml ├── shadow_bg.xml ├── shape_rect_r30_b1_999.xml ├── shape_rect_r30_blue.xml ├── shape_rect_r8_tcc_white.xml ├── shape_rect_r8_white.xml ├── shape_search.xml ├── shape_search_favorite_light.xml ├── shape_theme_bg.xml ├── shape_theme_bg_selected.xml ├── side_nav_bar.xml ├── wave_blue.xml ├── layout ├── activity_about.xml ├── activity_add_city.xml ├── activity_base.xml ├── activity_city_manager.xml ├── activity_feed_back.xml ├── activity_login.xml ├── activity_main.xml ├── activity_settings.xml ├── activity_splash.xml ├── activity_theme.xml ├── activity_user_info.xml ├── dialog_alarm.xml ├── dialog_change_city.xml ├── dialog_upgrade.xml ├── fragment_weather.xml ├── item_city_manager.xml ├── item_forecast.xml ├── item_forecast15.xml ├── item_searching.xml ├── item_top_city.xml ├── item_warning.xml ├── layout_air_quality.xml ├── layout_arrow_right.xml ├── layout_forecast_15d.xml ├── layout_forecast_hourly.xml ├── layout_life_indicator.xml ├── layout_sun_moon.xml ├── layout_support.xml ├── layout_today_brief_info.xml ├── layout_weather_notify.xml ├── nav_header_main.xml ├── preference_widget_checkbox.xml ├── weather_widget.xml ├── menu ├── activity_main_drawer.xml ├── mipmap-anydpi-v26 ├── ic_launcher.xml ├── ic_launcher_round.xml ├── mipmap-hdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-mdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-xhdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-xxhdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-xxxhdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── values-night ├── colors.xml ├── themes.xml ├── values ├── array.xml ├── attrs.xml ├── colors.xml ├── dimens.xml ├── strings.xml ├── themes.xml ├── xml ├── file_paths.xml ├── root_preferences.xml ├── shortcuts.xml ├── weather_widget_info.xml ├── test ├── java ├── me ├── wsj ├── fengyun ├── ExampleUnitTest.kt ├── article ├── article.md ├── img ├── 1.png ├── 15d.gif ├── 2.png ├── 3.png ├── 4.png ├── add_city.png ├── effect.gif ├── effect1.gif ├── effect2.gif ├── effect3.gif ├── home.gif ├── hourly.gif ├── sun.gif ├── widget.gif ├── swiperedelete ├── Android侧滑删除的两种实现.md ├── grid.gif ├── linear.gif ├── mock.png ├── bg ├── .gitignore ├── build.gradle ├── proguard-rules.pro ├── src ├── androidTest ├── java ├── me ├── wsj ├── bg ├── ExampleInstrumentedTest.kt ├── main ├── AndroidManifest.xml ├── java ├── me ├── wsj ├── bg ├── Main2Activity.kt ├── MainActivity.kt ├── ShowActivity.kt ├── adapter ├── AllAdapter.kt ├── SwipeAdapter.kt ├── bean ├── WeatherBean.kt ├── res ├── drawable-v24 ├── ic_launcher_foreground.xml ├── drawable ├── ic_launcher_background.xml ├── layout ├── activity_main.xml ├── activity_main2.xml ├── activity_show.xml ├── item_option.xml ├── item_swipe.xml ├── mipmap-anydpi-v26 ├── ic_launcher.xml ├── ic_launcher_round.xml ├── mipmap-hdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-mdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-xhdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-xxhdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── mipmap-xxxhdpi ├── ic_launcher.png ├── ic_launcher_round.png ├── values-night ├── themes.xml ├── values ├── colors.xml ├── strings.xml ├── themes.xml ├── test ├── java ├── me ├── wsj ├── bg ├── ExampleUnitTest.kt ├── build.gradle ├── buildSrc ├── build.gradle ├── lib ├── aliyun-sdk-oss-3.8.0.jar ├── commons-codec-1.9.jar ├── commons-logging-1.2.jar ├── hamcrest-core-1.1.jar ├── httpclient-4.4.1.jar ├── httpcore-4.4.1.jar ├── jdom-1.1.jar ├── src ├── main ├── groovy ├── per ├── wsj ├── plugin ├── PublishPlugin.groovy ├── PublishTask.groovy ├── bean ├── PublishBean.groovy ├── PublishConfig.groovy ├── gradle.properties ├── gradle ├── wrapper ├── gradle-wrapper.jar ├── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── img ├── 15d.gif ├── add_city.gif ├── add_city.png ├── city_manager.gif ├── effect.gif ├── home.gif ├── home0.gif ├── hourly.gif ├── qrcode.png ├── settings.png ├── sun.gif ├── widget.gif ├── lib ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro ├── src ├── androidTest ├── java ├── me ├── wsj ├── lib ├── ExampleInstrumentedTest.kt ├── main ├── AndroidManifest.xml ├── java ├── me ├── wsj ├── lib ├── BaseApp.kt ├── EffectUtil.kt ├── bean ├── BaseBean.kt ├── common ├── CommonInitTask.kt ├── InitTask.kt ├── dialog ├── BaseDialog.java ├── BaseDialogFragment.java ├── DialogInit.kt ├── LoadingDialog.kt ├── extension ├── CommonExt.kt ├── Delegate.kt ├── TouchExpand.kt ├── hotfix ├── ClassLoaderInjector.java ├── EnjoyClassLoader.java ├── EnjoyFix.java ├── ShareReflectUtil.java ├── logdb ├── LogDatabase.kt ├── LogRepo.kt ├── dao ├── LogDao.kt ├── entity ├── LogEntity.kt ├── net ├── HttpDns.kt ├── HttpUtils.kt ├── LoadState.kt ├── MyInterceptor.kt ├── OkHttpEventListener.kt ├── OkHttpUtils.kt ├── callback ├── CallBack.kt ├── HttpCallback.java ├── exception ├── ExceptionUtils.kt ├── RequestException.kt ├── interceptor ├── NetCacheInterceptor.java ├── parser ├── HeFengParser.kt ├── ResultParser.kt ├── plugin ├── PluginUtil.kt ├── ResourceWrapper.kt ├── specialeffects ├── EffectCloudDrawable.kt ├── EffectLightningDrawable.kt ├── EffectMoonNDrawable.kt ├── EffectRainDrawable.kt ├── EffectSnow2Drawable.kt ├── EffectSnowDrawable.kt ├── EffectSunDrawable.kt ├── deprecate ├── Effect1View.kt ├── entity ├── Cloud.kt ├── Rain.kt ├── utils ├── ApkInstallUtil.java ├── DateUtil.kt ├── DensityUtil.java ├── IconUtils.kt ├── LiveDataBus.kt ├── SpUtil.java ├── WeatherUtil.kt ├── view ├── LoadingDrawable.kt ├── SwipeDeleteRecyclerView.java ├── swipemenu ├── SwipeMenuLayout.java ├── swiperefresh ├── MyCircleImageView.kt ├── MySwipeRefreshLayout.java ├── res ├── drawable-nodpi ├── bg_0_d.jpg ├── bg_1_d.jpg ├── bg_1_night.jpg ├── bg_2_d.jpg ├── bg_2_night.jpg ├── bg_3_d.jpg ├── bg_4_d.jpg ├── bg_5_d.jpg ├── bg_6_d.jpg ├── bg_6_n.jpg ├── bg_7_d.jpg ├── bg_8_d.jpg ├── bg_9_d.jpg ├── bg_cloudy_night_moon.png ├── bg_fine_night_moon.png ├── cloudy_day_1.png ├── cloudy_day_2.png ├── cloudy_day_3.png ├── cloudy_day_4.png ├── cloudy_night1.png ├── cloudy_night2.png ├── fine_big_star.png ├── fine_middle_star.png ├── fine_min_star.png ├── fine_small_star.png ├── fog_cloud_1.png ├── fog_cloud_2.png ├── ic_loading_cloud.png ├── ic_loading_sun.png ├── lightning_1.png ├── lightning_2.png ├── moon.png ├── raindrop.png ├── raindrop_2xl.png ├── raindrop_l.png ├── raindrop_m.png ├── raindrop_s.png ├── raindrop_xl.png ├── snow_flower_22.png ├── snow_flower_24.png ├── snowflake_l.png ├── snowflake_m.png ├── snowflake_s.png ├── snowflake_tiny.png ├── snowflake_xl.png ├── snowflake_xxl.png ├── sun_icon.png ├── sunshine_1.png ├── sunshine_2.png ├── sunshine_3.png ├── drawable-xhdpi ├── icon_100d.png ├── icon_100n.png ├── icon_101d.png ├── icon_101n.png ├── icon_102d.png ├── icon_102n.png ├── icon_103_d.png ├── icon_103_n.png ├── icon_104d.png ├── icon_104n.png ├── icon_300d.png ├── icon_300n.png ├── icon_301d.png ├── icon_301n.png ├── icon_302d.png ├── icon_302n.png ├── icon_303d.png ├── icon_303n.png ├── icon_304d.png ├── icon_304n.png ├── icon_305d.png ├── icon_305n.png ├── icon_306d.png ├── icon_306n.png ├── icon_307d.png ├── icon_307n.png ├── icon_308d.png ├── icon_308n.png ├── icon_309d.png ├── icon_309n.png ├── icon_310d.png ├── icon_310n.png ├── icon_311d.png ├── icon_311n.png ├── icon_312d.png ├── icon_312n.png ├── icon_313d.png ├── icon_313n.png ├── icon_314d.png ├── icon_314n.png ├── icon_315d.png ├── icon_315n.png ├── icon_316d.png ├── icon_316n.png ├── icon_317d.png ├── icon_317n.png ├── icon_318d.png ├── icon_318n.png ├── icon_399d.png ├── icon_399n.png ├── icon_400d.png ├── icon_400n.png ├── icon_401d.png ├── icon_401n.png ├── icon_402d.png ├── icon_402n.png ├── icon_403d.png ├── icon_403n.png ├── icon_404d.png ├── icon_404n.png ├── icon_405d.png ├── icon_405n.png ├── icon_406d.png ├── icon_406n.png ├── icon_407d.png ├── icon_407n.png ├── icon_408d.png ├── icon_408n.png ├── icon_409d.png ├── icon_409n.png ├── icon_410d.png ├── icon_410n.png ├── icon_499d.png ├── icon_499n.png ├── icon_500d.png ├── icon_500n.png ├── icon_501d.png ├── icon_501n.png ├── icon_502d.png ├── icon_502n.png ├── icon_503d.png ├── icon_503n.png ├── icon_504d.png ├── icon_504n.png ├── icon_507d.png ├── icon_507n.png ├── icon_508d.png ├── icon_508n.png ├── icon_509d.png ├── icon_509n.png ├── icon_510d.png ├── icon_510n.png ├── icon_511d.png ├── icon_511n.png ├── icon_512d.png ├── icon_512n.png ├── icon_513d.png ├── icon_513n.png ├── icon_514d.png ├── icon_514n.png ├── icon_515d.png ├── icon_515n.png ├── icon_900d.png ├── icon_900n.png ├── icon_901d.png ├── icon_901n.png ├── icon_999d.png ├── icon_999n.png ├── drawable ├── bg_0_n.xml ├── bg_1_n.xml ├── bg_2_n.xml ├── bg_3_n.xml ├── bg_4_n.xml ├── bg_5_n.xml ├── bg_7_n.xml ├── bg_8_n.xml ├── bg_9_n.xml ├── shape_blue_alarm.xml ├── shape_orange_alarm.xml ├── shape_red_alarm.xml ├── shape_white_alarm.xml ├── shape_yellow_alarm.xml ├── layout ├── custom_toast.xml ├── dialog_loading.xml ├── values ├── colors.xml ├── styles.xml ├── test ├── java ├── me ├── wsj ├── lib ├── ExampleUnitTest.kt ├── plugin-lib ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro ├── src ├── main ├── AndroidManifest.xml ├── java ├── me ├── wsj ├── plugin_lib ├── ActivityLifecycleCallback.java ├── LayoutInflaterDelegate.java ├── SkinAttribute.java ├── SkinManager.java ├── SkinViewSupport.java ├── utils ├── ResourceManager.java ├── SkinThemeUtils.java ├── res ├── values ├── attrs.xml ├── plugin ├── .gitignore ├── build.gradle ├── consumer-rules.pro ├── proguard-rules.pro ├── src ├── main ├── AndroidManifest.xml ├── res ├── drawable-xhdpi ├── icon_100d.png ├── icon_100n.png ├── icon_101d.png ├── icon_101n.png ├── icon_102d.png ├── icon_102n.png ├── icon_103d.png ├── icon_103n.png ├── icon_104d.png ├── icon_104n.png ├── icon_300d.png ├── icon_300n.png ├── icon_301d.png ├── icon_301n.png ├── icon_302d.png ├── icon_302n.png ├── icon_303d.png ├── icon_303n.png ├── icon_304d.png ├── icon_304n.png ├── icon_305d.png ├── icon_305n.png ├── icon_306d.png ├── icon_306n.png ├── icon_307d.png ├── icon_307n.png ├── icon_308d.png ├── icon_308n.png ├── icon_309d.png ├── icon_309n.png ├── icon_310d.png ├── icon_310n.png ├── icon_311d.png ├── icon_311n.png ├── icon_312d.png ├── icon_312n.png ├── icon_313d.png ├── icon_313n.png ├── icon_314d.png ├── icon_314n.png ├── icon_315d.png ├── icon_315n.png ├── icon_316d.png ├── icon_316n.png ├── icon_317d.png ├── icon_317n.png ├── icon_318d.png ├── icon_318n.png ├── icon_399d.png ├── icon_399n.png ├── icon_400d.png ├── icon_400n.png ├── icon_401d.png ├── icon_401n.png ├── icon_402d.png ├── icon_402n.png ├── icon_403d.png ├── icon_403n.png ├── icon_404d.png ├── icon_404n.png ├── icon_405d.png ├── icon_405n.png ├── icon_406d.png ├── icon_406n.png ├── icon_407d.png ├── icon_407n.png ├── icon_408d.png ├── icon_408n.png ├── icon_409d.png ├── icon_409n.png ├── icon_410d.png ├── icon_410n.png ├── icon_499d.png ├── icon_499n.png ├── icon_500d.png ├── icon_500n.png ├── icon_501d.png ├── icon_501n.png ├── icon_502d.png ├── icon_502n.png ├── icon_503d.png ├── icon_503n.png ├── icon_504d.png ├── icon_504n.png ├── icon_507d.png ├── icon_507n.png ├── icon_508d.png ├── icon_508n.png ├── icon_509d.png ├── icon_509n.png ├── icon_510d.png ├── icon_510n.png ├── icon_511d.png ├── icon_511n.png ├── icon_512d.png ├── icon_512n.png ├── icon_513d.png ├── icon_513n.png ├── icon_514d.png ├── icon_514n.png ├── icon_515d.png ├── icon_515n.png ├── icon_900d.png ├── icon_900n.png ├── icon_901d.png ├── icon_901n.png ├── icon_999d.png ├── icon_999n.png ├── drawable ├── ic_about.xml ├── ic_air_condition.xml ├── icon_loc.xml ├── readme.txt ├── readme_en.md ├── settings.gradle