package com.liyu.fakeweather.widgets; import android.content.Context; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.liyu.fakeweather.model.HeWeather5; import com.liyu.fakeweather.model.WeatherBean; import com.liyu.fakeweather.utils.SimpleSubscriber; import com.liyu.fakeweather.utils.SizeUtils; import com.liyu.fakeweather.utils.TimeUtils; import com.liyu.fakeweather.utils.WeatherUtil; import java.util.ArrayList; import java.util.List; import rx.android.schedulers.AndroidSchedulers; /** * Created by liyu on 2016/12/8. */ public class WeatherChartView extends LinearLayout { private List<HeWeather5.DailyForecastBean> dailyForecastList = new ArrayList<>(); LinearLayout.LayoutParams cellParams; LinearLayout.LayoutParams rowParams; LinearLayout.LayoutParams chartParams; public WeatherChartView(Context context) { this(context, null); } public WeatherChartView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public WeatherChartView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.setOrientation(VERTICAL); rowParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); cellParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1); chartParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, SizeUtils.dp2px(getContext(), 200)); } private void letItGo() { removeAllViews(); LinearLayout dateTitleView = new LinearLayout(getContext()); dateTitleView.setLayoutParams(rowParams); dateTitleView.setOrientation(HORIZONTAL); dateTitleView.removeAllViews(); LinearLayout iconView = new LinearLayout(getContext()); iconView.setLayoutParams(rowParams); iconView.setOrientation(HORIZONTAL); iconView.removeAllViews(); LinearLayout weatherStrView = new LinearLayout(getContext()); weatherStrView.setLayoutParams(rowParams); weatherStrView.setOrientation(HORIZONTAL); weatherStrView.removeAllViews(); List<Integer> minTemp = new ArrayList<>(); List<Integer> maxTemp = new ArrayList<>(); HeWeather5.DailyForecastBean yesterday = WeatherUtil.getYesterday(); if (yesterday != null) { dailyForecastList.add(0, yesterday); } for (int i = 0; i < dailyForecastList.size(); i++) { TextView tvDate = new TextView(getContext()); tvDate.setGravity(Gravity.CENTER); tvDate.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10); TextView tvWeather = new TextView((getContext())); tvWeather.setGravity(Gravity.CENTER); tvWeather.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10); final ImageView ivIcon = new ImageView(getContext()); ivIcon.setAdjustViewBounds(true); ivIcon.setScaleType(ImageView.ScaleType.FIT_CENTER); int padding = SizeUtils.dp2px(getContext(), 10); ivIcon.setPadding(padding, padding, padding, padding); if (yesterday != null) { if (i == 0) { tvDate.setText("昨天"); } else if (i == 1) { tvDate.setText("今天"); } else if (i == 2) { tvDate.setText("明天"); } else { tvDate.setText(TimeUtils.getWeek(dailyForecastList.get(i).getDate(), TimeUtils.DATE_SDF)); } } else { if (i == 0) { tvDate.setText("今天"); } else if (i == 1) { tvDate.setText("明天"); } else { tvDate.setText(TimeUtils.getWeek(dailyForecastList.get(i).getDate(), TimeUtils.DATE_SDF)); } } tvWeather.setText(dailyForecastList.get(i).getCond().getTxt_d()); WeatherUtil.getWeatherDict(dailyForecastList.get(i).getCond().getCode_d()).observeOn(AndroidSchedulers.mainThread()).subscribe(new SimpleSubscriber<WeatherBean>() { @Override public void onNext(WeatherBean weatherBean) { Glide.with(getContext()).load(weatherBean.getIcon()).diskCacheStrategy(DiskCacheStrategy.ALL).dontTransform().into(ivIcon); } }); minTemp.add(Integer.valueOf(dailyForecastList.get(i).getTmp().getMin())); maxTemp.add(Integer.valueOf(dailyForecastList.get(i).getTmp().getMax())); weatherStrView.addView(tvWeather, cellParams); dateTitleView.addView(tvDate, cellParams); iconView.addView(ivIcon, cellParams); } addView(dateTitleView); addView(iconView); addView(weatherStrView); ChartView chartView = new ChartView(getContext()); chartView.setData(minTemp, maxTemp); chartView.setPadding(0, SizeUtils.dp2px(getContext(), 16), 0, SizeUtils.dp2px(getContext(), 16)); addView(chartView, chartParams); } public void setWeather5(HeWeather5 weather5) { dailyForecastList.clear(); dailyForecastList.addAll(weather5.getDaily_forecast()); letItGo(); } }