前言:添加了学习模块,所以做了一个每日一句的功能,主要是在天行数据申请了一个每日一句的api,之后用okgo,调取,并解析成对象。获取文字、图片、音频等。在线显示、播放。同时做了一个底部弹出日历选择。

每日一句功能是在天行数据申请了一个每日一句的api,通过Okgo网络请求封装工具获取Json数据,再通过Gson解析成EnglishSentence对象,EnglishSentence.NewslistBean中包括内容、在线图片、在线音频、日期等,将对象显示到每日一句界面。点击左下的麦克风图标,可以播放英语口语。顶部有日期选择功能,可点击前一天、后一天、点击日期从底部弹出日历选择器跳转不同日期的数据。

效果图:

/**网络请求封装**/
implementation 'com.lzy.net:okgo:3.0.4'
/**日历选择器**/
implementation 'com.prolificinteractive:material-calendarview:1.4.3'

Json 格式:

{"code": 200,"msg": "success","newslist": [{"id": 3725,"content": "Passion is a key ingredient to the study and practice of law and of life.","note": "激情是学习和实践法律不可或缺的要素,同时也是生命中不可或缺的要素。","tts": "https://edu-wps.ks3-cn-beijing.ksyun.com/audio/17c662155203497977f9536ac2bac6e1.mp3","imgurl": "https://edu-wps.ks3-cn-beijing.ksyun.com/image/88a1b7e9b02be6388329a4be911f7293.png","date": "2020-04-06"}]
}

网络获取:

public class HttpUtils {public static final String TAG = "HttpUtils";public static void getEnglishSentence(Context context, String date , StringCallback callback) throws IOException {OkGo.<String>get(UrlsConfig.EVERYDAY_ENGLISH_API).tag(context).params("key", ApiConfig.API_AppKey).params("date", date).execute(callback);}
}

EverydayEnglishFragment.java

public class EverydayEnglishFragment extends BaseFragment {public static final String TAG = "EverydayEnglishFragment";@BindView(R.id.tv_year)TextView tv_year;@BindView(R.id.tv_month)TextView tv_month;@BindView(R.id.tv_day)TextView tv_day;@BindView(R.id.calendar_left)ImageView calendar_left;@BindView(R.id.calendar_right)ImageView calendar_right;@BindView(R.id.img_english)SimpleDraweeView imgEnglish;private Calendar calendar;EnglishSentence.NewslistBean mNewslistBean;public static Fragment getInstance() {Fragment fragment = new EverydayEnglishFragment();return fragment;}@Overrideprotected int contentViewID() {return R.layout.fragment_everyday_english;}@Overrideprotected void initialize() {EventBus.getDefault().register(this);calendar = Calendar.getInstance();setTextDate(calendar);getHttpData(calendar);return;}private void setTextDate(Calendar calendar) {tv_year.setText(calendar.get(Calendar.YEAR) + "");tv_month.setText(calendar.get(Calendar.MONTH) + 1 + "");tv_day.setText(calendar.get(Calendar.DAY_OF_MONTH) + "");changeArrowImage(calendar);}private void getHttpData(Calendar calendar) {String date = FormatUtils.getDateTimeString(calendar.getTime(), FormatUtils.template_Date);try {StringCallback callback = new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {try {String json = response.body().toString();JSONObject jsonObject = new JSONObject(json);int code = jsonObject.getInt("code");if (code == 200) {JSONArray jsonArray = jsonObject.getJSONArray("newslist");List<EnglishSentence.NewslistBean> newslistBeanList = new Gson().fromJson(jsonArray.toString(),new TypeToken<List<EnglishSentence.NewslistBean>>() {}.getType());LogUtils.d(TAG, newslistBeanList.get(0).toString());mNewslistBean = newslistBeanList.get(0);setTextImg(mNewslistBean);}} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onError(Response<String> response) {super.onError(response);}};HttpUtils.getEnglishSentence(getContext(), date, callback);} catch (IOException e) {e.printStackTrace();}}public void changeArrowImage(Calendar calendar){if (DateUtils.isTody(calendar)){calendar_left.setImageResource(R.mipmap.arrow_left);calendar_right.setImageResource(R.mipmap.right_gay);} else {calendar_left.setImageResource(R.mipmap.arrow_left);calendar_right.setImageResource(R.mipmap.arrow_right);}}private void setTextImg(EnglishSentence.NewslistBean newslistBean) {if (newslistBean.getImgurl() != null){imgEnglish.setImageURI(newslistBean.getImgurl());}}@OnClick({R.id.english_mediaPlayer, R.id.calendar_left, R.id.calendar_right, R.id.calender_select})public void onClick(View view) {switch (view.getId()) {case R.id.english_mediaPlayer:if (mNewslistBean == null){return;}onPlayer(mNewslistBean);break;case R.id.calendar_left:calendar.add(Calendar.DATE, -1);setTextDate(calendar);getHttpData(calendar);break;case R.id.calendar_right:if (DateUtils.isTody(calendar)){return;}calendar.add(Calendar.DATE, 1);setTextDate(calendar);getHttpData(calendar);break;case R.id.calender_select:startActivity(CalenderSelectActivity.class);getActivity().overridePendingTransition(R.anim.bottom_in,R.anim.bottom_silent);break;default:}}private void onPlayer(EnglishSentence.NewslistBean newslistBean) {if (newslistBean.getTts() != null) {try {MediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setDataSource(newslistBean.getTts());mediaPlayer.prepare();mediaPlayer.start();} catch (IOException e) {e.printStackTrace();}}}@Subscribe(threadMode = ThreadMode.MAIN)public void onEvent(CalenderEvent calenderEvent) {switch (calenderEvent.getMessage()) {case ConstantConfig.CALENDER_SELECT:calendar = calenderEvent.getCalendar();setTextDate(calendar);getHttpData(calendar);break;default:}}@Overridepublic void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);OkGo.getInstance().cancelAll();}
}

日历选择

public class CalenderSelectActivity extends BaseActivity implements OnDateSelectedListener {@BindView(R.id.materialCalendarView)MaterialCalendarView widget;@Overrideprotected int contentViewID() {return R.layout.activity_calender_select;}@Overrideprotected void initialize() {StatusBarUtils.setTransparent(this);getSupportActionBar().hide();setTopTitle("",false);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);widget.setSelectedDate(CalendarDay.today());widget.state().edit().setMaximumDate(CalendarDay.today()).commit();widget.setOnDateChangedListener(this);}@Overridepublic void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {EventBus.getDefault().post(new CalenderEvent(ConstantConfig.CALENDER_SELECT,date.getCalendar()));finish();}@Overridepublic void finish() {super.finish();overridePendingTransition(R.anim.bottom_silent,R.anim.bottom_out);}
}

弹入 弹出 动画XML bottom_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="25"android:toYDelta="100%p"android:duration="1000"/>
</set>

bottom_silent.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:fromYDelta="0"android:toYDelta="0"android:duration="1800"/>
</set>

Android实例 每日一句(英语)相关推荐

  1. 每日两句英语-7/7/2009

    从今天开始每日两句英语,坚持坚持. 1.Keep your chin up! 别灰心. chin是下颚的意思,我的理解是再困难也要高昂你的头颅,别被打倒~~. 相关的句子:1. Hold your h ...

  2. Python 教你自动发微博,每日一句英语

    作者:周萝卜 最近在研究用 Python 来制作各个类别的机器人,今天先来分享一个自动发布新浪微博的机器人. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知 ...

  3. python 微博自动点赞软件_Python微博工具人,每日一句英语自动发

    原标题:Python微博工具人,每日一句英语自动发 关注 来源 | 萝卜大杂烩(ID:luobodazahui) 如若转载请联系原公众号 最近在研究用 Python 来制作各个类别的机器人,今天先来分 ...

  4. 每日一句英语,看我能够坚持多久

    2007-10-11: 中文:你最好以中国公司的名义去订货,因为如果你以国外公司的名义去订货,可能价格要高得多 Translation: You'd better order the product ...

  5. python 自动发微博_Python 教你自动发微博,每日一句英语

    作者:周萝卜 最近在研究用 Python 来制作各个类别的机器人,今天先来分享一个自动发布新浪微博的机器人. 基本思路 其实要实现一个简单的自动发布微博机器人还是不难的,只需要每天按时找好要发布的素材 ...

  6. python爬取网页每日一句英语发给微信好友

    步骤 链接:http://dict.eudic.net/home/dailysentence' 使用urllib获取网页代码 使用etree解析网页数据并使用xpath找到想要的内容 扫码登录微信 输 ...

  7. android英语,Android 每日一句(英语)

    前言:添加了学习模块,所以做了一个每日一句的功能,主要是在天行数据申请了一个每日一句的api,之后用okgo,调取,并解析成对象.获取文字.图片.音频等.在线显示.播放.同时做了一个底部弹出日历选择. ...

  8. 每日一句英语:怎样回答美国人的How is it going问候语?

    和中国人"吃了吗"是一个性质,本质上仅仅是个话题的起始点,而不是真的想知道你吃了没有. 美国人打招呼有几种方式: 不太熟的人:How are you? 一 般说 pretty go ...

  9. 每日一句api Android,金山每日一句 API 接口调用接入方法

    原标题:金山每日一句 API 接口调用接入方法 金山每日一句 API 大家都听说过吧,金山每日一句 API 每次刷新网页都会带来一个新的语句,现在盒子部落公布金山每日一句 API 接口,可以直接在自己 ...

最新文章

  1. Qt自定义类之自由移动的mainwindow
  2. 第二章-大数据处理框Hadoop
  3. ppt格式刷快捷键_普通人 | 4个我在知乎上都没有见过的PPT实用技巧
  4. dp线长什么样子_HDMI、VGA、DVI、DP接口知识,史上最全面最通俗易懂对比分析!...
  5. linux php curl.so,linux中php如何安装CURL扩展方法
  6. golang中container/list包中的坑
  7. python安装idle_Python从零单排之Python环境及IDLE安装
  8. Cmake构建_设置全局编译选项
  9. 使用javascript下载网络图片
  10. pandas 中delete、drop函数的用法
  11. OSChina 端午节乱弹 ——用魔兽世界来祭奠青春
  12. java中三元运算符_java中的三元运算符详解
  13. 用Wireshark下载微信小程序里的视频【图文教程】
  14. 推荐三款实用的录音转文字软件给你
  15. 大学生活快要结束了,才想要珍惜~~~
  16. AWS Key Management Service(KMS)
  17. 仿京东收货地址三级联动
  18. Android使用WebView加载Url时提示“请在微信客户端打开链接”
  19. python中import文件夹下面py文件,报错
  20. bootstrap-table 添加行保留原数据

热门文章

  1. 《c语言入门题目19》判断一个数是不是质数(素数)
  2. 在C语言中如何判断一个数是不是2的幂次方,判断一个数是否为2的幂次方的方法...
  3. java基于ssm的快递物流管理系统
  4. 安理工计算机学院官网,安理工计算机科学与工程学院导师介绍:张顺香
  5. 二手air pods 入手须知
  6. P2433 【深基1-2】小学数学 N 合一(题解)​
  7. 【认知提升思维篇】之 反刍思维--恶性思考的根源
  8. 经典网页设计:超炫的动画效果单页网站设计
  9. 《剑指Offer》 二维数组的查找 C语言版本
  10. Compound-Fault Diagnosis of Rotating Machinery: A Fused Imbalance Learning Method