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

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

效果图:

dc229169297e08cf16be8bec63ec93f8.png

e57d1ffa9cd42fd5205c20de070f2bef.png

/**网络请求封装**/

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.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;

}

@Override

protected int contentViewID() {

return R.layout.fragment_everyday_english;

}

@Override

protected 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() {

@Override

public void onSuccess(Response 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 newslistBeanList = new Gson().fromJson(jsonArray.toString(),

new TypeToken>() {

}.getType());

LogUtils.d(TAG, newslistBeanList.get(0).toString());

mNewslistBean = newslistBeanList.get(0);

setTextImg(mNewslistBean);

}

} catch (JSONException e) {

e.printStackTrace();

}

}

@Override

public void one rror(Response 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:

}

}

@Override

public void onDestroy() {

super.onDestroy();

EventBus.getDefault().unregister(this);

OkGo.getInstance().cancelAll();

}

}

日历选择

public class CalenderSelectActivity extends BaseActivity implements OnDateSelectedListener {

@BindView(R.id.materialCalendarView)

MaterialCalendarView widget;

@Override

protected int contentViewID() {

return R.layout.activity_calender_select;

}

@Override

protected 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);

}

@Override

public void onDateSelected(@NonNull MaterialCalendarView widget, @NonNull CalendarDay date, boolean selected) {

EventBus.getDefault().post(new CalenderEvent(ConstantConfig.CALENDER_SELECT,date.getCalendar()));

finish();

}

@Override

public void finish() {

super.finish();

overridePendingTransition(R.anim.bottom_silent,R.anim.bottom_out);

}

}

弹入 弹出 动画XML bottom_out.xml

android:fromYDelta="25"

android:toYDelta="100%p"

android:duration="1000"

/>

bottom_silent.xml

android:fromYDelta="0"

android:toYDelta="0"

android:duration="1800"

/>

标签:tv,Calendar,每日,id,void,calendar,Android,英语,public

来源: https://blog.csdn.net/qq_39131246/article/details/105348480

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值