天气预报项目学习总结
来源:互联网 发布:部落冲突地震法术数据 编辑:程序博客网 时间:2024/05/16 09:16
SlidingMenu使用:
Java代码构造:
SlidingMenu构造方式:
SlidingMenumenu=new SlidingMenu(context);
+++++++++++++++++++++++++++++++++++++++++++
SlidingMenumenu=new SlidingMenu(this);
//设置侧滑的菜单的布局文件
menu.setMenu(R.layout.sliding_left);
//设置侧滑的方式
menu.setMode(SlidingMenu.LEFT_RIGHT);
//设置右侧菜单
menu.setSecondaryMenu(R.layout.sliding_right);
//设置窗口剩余的宽度
//menu.setBehindOffset(200);
menu.setBehindWidth(150);
//设置侧滑的屏幕的位置
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
//把侧滑菜单添加到活动窗口上
//menu.attachToActivity(this,SlidingMenu.SLIDING_CONTENT);
menu.attachToActivity(this,SlidingMenu.SLIDING_WINDOW);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SlidingMenu常用属性介绍:
menu.setMode(SlidingMenu.LEFT);//设置左滑菜单
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的屏幕范围,该设置为全屏区域都可以滑动
menu.setShadowDrawable(R.drawable.shadow);//设置阴影图片
menu.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
menu.setBehindWidth(400);//设置SlidingMenu菜单的宽度
menu.setFadeDegree(0.35f);//SlidingMenu滑动时的渐变程度
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);//使SlidingMenu附加在Activity上
menu.setMenu(R.layout.menu_layout);//设置menu的布局文件
menu.toggle();//动态判断自动关闭或开启SlidingMenu
menu.showMenu();//显示SlidingMenu
menu.showContent();//显示内容
menu.setOnOpenListener(onOpenListener);//监听slidingmenu打开
关于关闭menu有两个监听,简单的来说,对于menuclose事件,一个是when,一个是after
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭时事件
menu.OnClosedListener(OnClosedListener);//监听slidingmenu关闭后事件
左右都可以划出SlidingMenu菜单只需要设置
menu.setMode(SlidingMenu.LEFT_RIGHT);属性,然后设置右侧菜单的布局文件
menu.setSecondaryShadowDrawable(R.drawable.shadowright);//右侧菜单的阴影图片
设置SlidingMenu属性
sm = getSlidingMenu();
//如果只显示左侧菜单就是用LEFT,右侧就RIGHT,左右都支持就LEFT_RIGHT
sm.setMode(SlidingMenu.LEFT_RIGHT);//设置菜单滑动模式,菜单是出现在左侧还是右侧,还是左右两侧都有
sm.setShadowDrawable(R.drawable.shadow);//设置阴影的图片资源
sm.setShadowWidthRes(R.dimen.shadow_width);//设置阴影图片的宽度
//sm.setBehindWidth(200);//设置菜单的宽
sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//SlidingMenu划出时主页面显示的剩余宽度
sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);//设置滑动的区域
支持右侧划出菜单:
//SlidingMenu可以同时支持划出左右两侧的菜单,互不冲突,而且动画优美,体验良好。
sm.setSecondaryMenu(R.layout.menu_frame2);//设置右侧菜单
sm.setSecondaryShadowDrawable(R.drawable.shadowright);//设置右侧菜单阴影的图片资源
//右侧SlidingMenu的Fragment
getSupportFragmentManager().beginTransaction().replace(R.id.menu_frame2, newSampleListFragment()).commit();
slidingMenu= getSlidingMenu();
//设置是左滑还是右滑,还是左右都可以滑
slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
//设置阴影宽度
slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() /40);
//设置左菜单阴影图片
slidingMenu.setShadowDrawable(R.drawable.shadow);
//设置右菜单阴影图片
slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
//设置菜单占屏幕的比例
slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() /5);
//设置滑动时菜单的是否淡入淡出
slidingMenu.setFadeEnabled(true);
//设置淡入淡出的比例
slidingMenu.setFadeDegree(0.4f);
//设置滑动时拖拽效果
slidingMenu.setBehindScrollScale(0);
//设置要使菜单滑动,触碰屏幕的范围
slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
XML布局方式:
×××××××××××××××××××××××××××××××××××××××××
Gson:
Gson使用步骤:
1. 借助在线json格式化工具,查看返回的json字符串的格式
在线json格式化工具:
http://tool.oschina.net/codeformat/json
json实体数据封装的工具
http://www.bejson.com/
===================================================================================
2. 根据json字符串的格式,构造相对应的实体类Bean;
public class Employee {
private String empID;
private String name;
private booleanpermanent;
private Addressaddress;
privateList<String> phoneNumbers;
private String role;
private String[]cities;
private Propertiesproperties;
public StringgetEmpID() {
return empID;
}
public voidsetEmpID(String empID) {
this.empID = empID;
}
public String getName(){
return name;
}
public voidsetName(String name) {
this.name = name;
}
public booleanisPermanent() {
return permanent;
}
public voidsetPermanent(boolean permanent) {
this.permanent =permanent;
}
public AddressgetAddress() {
return address;
}
public voidsetAddress(Address address) {
this.address =address;
}
publicList<String> getPhoneNumbers() {
returnphoneNumbers;
}
public voidsetPhoneNumbers(List<String> phoneNumbers) {
this.phoneNumbers =phoneNumbers;
}
public String getRole(){
return role;
}
public voidsetRole(String role) {
this.role = role;
}
public String[]getCities() {
return cities;
}
public voidsetCities(String[] cities) {
this.cities =cities;
}
public PropertiesgetProperties() {
return properties;
}
public voidsetProperties(Properties properties) {
this.properties =properties;
}
public Employee() {
super();
// TODOAuto-generated constructor stub
}
public Employee(StringempID, String name, boolean permanent,
Addressaddress, List<String> phoneNumbers, String role,
String[]cities, Properties properties) {
super();
this.empID = empID;
this.name = name;
this.permanent =permanent;
this.address =address;
this.phoneNumbers =phoneNumbers;
this.role = role;
this.cities =cities;
this.properties =properties;
}
public static classAddress {
private Stringstreet;
private Stringcity;
private Stringzipcode;
public StringgetStreet() {
return street;
}
public voidsetStreet(String street) {
this.street =street;
}
public StringgetCity() {
return city;
}
public voidsetCity(String city) {
this.city =city;
}
public StringgetZipcode() {
return zipcode;
}
public voidsetZipcode(String zipcode) {
this.zipcode =zipcode;
}
publicAddress(String street, String city, String zipcode) {
super();
this.street =street;
this.city =city;
this.zipcode =zipcode;
}
public Address() {
super();
// TODOAuto-generated constructor stub
}
@Override
public StringtoString() {
return"Address [street=" + street + ", city=" + city
+", zipcode=" + zipcode + "]";
}
}
public static classProperties {
private String age;
private Stringsalary;
public StringgetAge() {
return age;
}
public voidsetAge(String age) {
this.age = age;
}
public StringgetSalary() {
return salary;
}
public voidsetSalary(String salary) {
this.salary =salary;
}
publicProperties(String age, String salary) {
super();
this.age = age;
this.salary =salary;
}
public Properties(){
super();
// TODOAuto-generated constructor stub
}
@Override
public StringtoString() {
return"Properties [age=" + age + ", salary=" + salary +"]";
}
}
@Override
public StringtoString() {
return"Employee [empID=" + empID + ", name=" + name + ",permanent="
+ permanent+ ", address=" + address + ", phoneNumbers="
+phoneNumbers + ", role=" + role + ", cities="
+Arrays.toString(cities) + ", properties=" + properties +"]";
}
}
===================================================================================
3. 构建Gson对象将Json字符串解析为实体类:
public class GsonTestEmp {
public static voidmain(String[] args) {
//构建Gson对象
Gson gson=new Gson();
try {
String jsonStr=new String(Files.readAllBytes(Paths.get("employee.txt")));
//System.out.println(jsonStr);
Employeeemployee=gson.fromJson(jsonStr, Employee.class);
System.out.println(employee.toString());
} catch (IOExceptione) {
e.printStackTrace();
}
}
}
×××××××××××××××××××××××××××××××××××××××××
Volley使用:
1. 字符串请求StringRequest:
第1步创建一个请求的队列
创建一个volley的请求对象
将请求对象添加到请求队列中
++++++++++++++++++++++++++++++++++++++++++++++++++
public class MainActivity extends Activity {
//第1步创建一个请求的队列
RequestQueue queue=null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue=Volley.newRequestQueue(this);
}
public void load(Viewview){
StringRequestrequest=null;
try {
String cityname= URLEncoder.encode("北京","utf8");
String url ="http://op.juhe.cn/onebox/weather/query?cityname="+cityname+"&dtype=&key=ea8441cb939845649b04948972f34db6";
//2.创建一个volley的请求对象
request= new StringRequest(url,
newListener<String>() {
@Override
publicvoid onResponse(String response) {
Gsongson=new Gson();
WeatherBeanbean=gson.fromJson(response, WeatherBean.class);
Log.i("TAG:weather",bean.toString());
}
}, newErrorListener() {
@Override
publicvoid onErrorResponse(VolleyError error) {
Log.i("TAG:error",error.getMessage());
}
});
} catch (Exceptione) {
e.printStackTrace();
}
//3.将请求对象添加到请求队列中
queue.add(request);
}
}
===================================================================================
2. 图片请求ImageRequest:
创建请求队列
获得ImageView控件
创建图片请求ImageRequest对象
将图片请求ImageRequest对象放入请求队列
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class MainActivity extends Activity {
RequestQueue queue=null;
ImageViewimageView_test=null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue=Volley.newRequestQueue(this);
imageView_test=(ImageView)findViewById(R.id.imageView_test);
}
public voidloadimage1(View view){
Stringurl="http://172.60.50.50:8080/MusicServer/images/disanji.jpg";
ImageRequestrequest=new ImageRequest(url, new Listener<Bitmap>() {
@Override
public voidonResponse(Bitmap response) {
imageView_test.setImageBitmap(response);
}
}, 0, 0,Config.ARGB_8888, new Response.ErrorListener() {
@Override
public voidonErrorResponse(VolleyError error) {
Log.i("TAG",error.getMessage());
}
});
queue.add(request);
}
}
===================================================================================
3. Json请求 jsonRequest
创建请求队列RequestQueue
创建JsonRequest对象
将JsonRequest放入请求队列RequestQueue
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class SecondActivity extends Activity {
RequestQueue queue=null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
queue=Volley.newRequestQueue(this);
}
public void loadjson(Viewview){
JsonRequest<JSONObject>jsonRequest=null;
try {
String cityname =URLEncoder.encode("北京","utf8");
String url ="http://op.juhe.cn/onebox/weather/query?cityname="
+ cityname+ "&dtype=&key=ea8441cb939845649b04948972f34db6";
jsonRequest = new JsonObjectRequest(url,
null, newListener<JSONObject>() {
@Override
publicvoid onResponse(JSONObject response) {
Log.i("TAG",response.toString());
}
}, newErrorListener() {
@Override
public void onErrorResponse(VolleyErrorerror) {
Log.e("ERROR",error.getMessage());
}
});
} catch (Exception e){
e.printStackTrace();
}
queue.add(jsonRequest);
}
}
===================================================================================
4. 自定义Volley请求:
自定义请求类继承Request累
重写构造方法
仿照StringRequest重写parseNetworkResponse方法
重写deliverResponse方法
和StringRequest一样使用
++++++++++++++++++++++++++++++++++++++++++++++++++++++
package com.tarena.karen.request;
import java.io.UnsupportedEncodingException;
import com.android.volley.NetworkResponse;
import com.android.volley.ParseError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.tarena.karen.entity.WeatherBean;
public class WeatherRequest extends Request<WeatherBean> {
privateListener<WeatherBean> mListener;
publicWeatherRequest(int method, String url,
Listener<WeatherBean>mListener, ErrorListener listener) {
super(method, url,listener);
this.mListener =mListener;
}
publicWeatherRequest(String url, Listener<WeatherBean> mListener,
ErrorListenerlistener) {
this(Method.GET,url, mListener, listener);
}
@Override
protectedResponse<WeatherBean> parseNetworkResponse(
NetworkResponseresponse) {
String jsonString;
try {
jsonString =new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
Gson gson = newGson();
WeatherBeanbean = gson.fromJson(jsonString, WeatherBean.class);
returnResponse.success(bean,
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingExceptione) {
e.printStackTrace();
returnResponse.error(new ParseError(e));
}
}
@Override
protected voiddeliverResponse(WeatherBean response) {
mListener.onResponse(response);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class MainActivity extends Activity {
RequestQueuequeue=null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue=Volley.newRequestQueue(this);
}
public voidloadweather(View view) throws UnsupportedEncodingException{
Stringcityname=URLEncoder.encode("北京", "utf8");
Stringurl="http://op.juhe.cn/onebox/weather/query?cityname="+cityname+"&dtype=&key=ea8441cb939845649b04948972f34db6";
WeatherRequestrequest=new WeatherRequest(url, new Listener<WeatherBean>() {
@Override
public voidonResponse(WeatherBean response) {
Log.i("TAG",response.toString());
}
}, newErrorListener() {
@Override
public voidonErrorResponse(VolleyError error) {
Log.e("ERROR",error.getMessage());
}
});
queue.add(request);
}
}
===================================================================================
Volley的其他图片处理方式:
1. Imageloader:
创建请求队列RequestQueue;
创建ImageLoader对象,同时构建ImageCache重写putBitmap和getBitmap方法
创建ImageListener对象
执行ImageLoader对象的loader.get(url, listener)方法
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class ImageLoaderActivity extends Activity {
ImageViewimageView_loader=null;
RequestQueuequeue=null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_loader);
imageView_loader=(ImageView)findViewById(R.id.imageView_loader);
queue=Volley.newRequestQueue(this);
}
public voidimageloader(View view){
ImageLoaderloader=new ImageLoader(queue, new ImageCache() {
int maxSize=1024*1024*4;
LruCache<String, Bitmap> cache=newLruCache<String, Bitmap>(maxSize){
protectedint sizeOf(String key, Bitmap value) {
returnvalue.getRowBytes()*value.getHeight();
};
};
@Override
public voidputBitmap(String url, Bitmap bitmap) {
//把加载成功的图片存入缓存
cache.put(url,bitmap);
}
@Override
public BitmapgetBitmap(String url) {
//从缓存中获得图片
returncache.get(url);
}
});
Stringurl="http://172.60.50.50:8080/MusicServer/images/disanji.jpg";
ImageListenerlistener=ImageLoader.getImageListener(
imageView_loader,
R.drawable.ic_launcher,
R.drawable.ic_launcher);
loader.get(url,listener);
}
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
2. 使用自定义的NetworkImageView
在Xml布局中使用NetworkImageView:
在java代码中获得NetworkImageView对象
创建请求队列RequestQueue
创建ImageLoader对象
执行NetworkImageView对象的.setImageUrl(url,loader)方法
+++++++++++++++++++++++++++++++++++++++++++++++++++++
<com.android.volley.toolbox.NetworkImageView
android:id="@+id/imageview_network"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"/>
++++++++++++++++++++++++++++++++++++++++++++++++++++
public class NetWorkImageActivity extends Activity {
NetworkImageViewimageView=null;
RequestQueuequeue=null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_net_work_image);
imageView=(NetworkImageView)findViewById(R.id.imageview_network);
queue=Volley.newRequestQueue(this);
imageView.setDefaultImageResId(R.drawable.ic_launcher);
imageView.setErrorImageResId(R.drawable.ic_launcher);
}
public voidloadnetwork(View view){
ImageLoaderloader=new ImageLoader(queue, new ImageCache() {
intmaxSize=1024*1024*4;
LruCache<String,Bitmap> cache=new LruCache<String, Bitmap>(maxSize){
protectedint sizeOf(String key, Bitmap value) {
returnvalue.getRowBytes()*value.getHeight();
};
};
@Override
public voidputBitmap(String url, Bitmap bitmap) {
cache.put(url,bitmap);
}
@Override
public BitmapgetBitmap(String url) {
returncache.get(url);
}
});
Stringurl="http://172.60.50.50:8080/MusicServer/images/disanji.jpg";
imageView.setImageUrl(url,loader);
}
}
PullToRefreshListView:
布局中使用PullToRefreshListView
建立PullToRefreshListView的ItemView的布局
在Java代码中获得PullToRefreshListView对象
创建适配器
将适配器与PullToRefreshListView对象关联
设置上拉刷新,下拉加载监听
++++++++++++++++++++++++++++++++++++++++++++++++++++++
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/refresh_listview"
>
</com.handmark.pulltorefresh.library.PullToRefreshListView>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal"
android:weightSum="5" >
<ImageView
android:id="@+id/image_item_weather"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="10dp"
android:src="@drawable/sunny" />
<TextView
android:id="@+id/textview_item_condition"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="晴" />
<TextView
android:id="@+id/textview_item_temp"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="21/18" />
<TextView
android:id="@+id/textview_item_weekday"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical"
android:text="星期三"/>
</LinearLayout>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class WeatherAdapter extends BaseAdapter {
List<Weather>weathers=new ArrayList<Weather>();
LayoutInflaterlayoutInflater=null;
publicWeatherAdapter(Context context) {
layoutInflater=LayoutInflater.from(context);
}
public voidaddWeathers(List<Weather> weatherList,boolean isClear){
if(isClear){
weathers.clear();
weathers.addAll(weatherList);
}else{
weathers.addAll(weatherList);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
returnweathers.size();
}
@Override
public WeathergetItem(int position) {
returnweathers.get(position);
}
@Override
public longgetItemId(int position) {
return position;
}
@Override
public View getView(intposition, View convertView, ViewGroup parent) {
ViewHolderholder=null;
if(convertView==null){
holder=newViewHolder();
convertView=layoutInflater.inflate(R.layout.inflate_weather_item,null);
holder.imageview_codition=(ImageView)convertView.findViewById(R.id.image_item_weather);
holder.textview_condition=(TextView)convertView.findViewById(R.id.textview_item_condition);
holder.textview_temp=(TextView)convertView.findViewById(R.id.textview_item_temp);
holder.textview_weekday=(TextView)convertView.findViewById(R.id.textview_item_weekday);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
Weatherweather=weathers.get(position);
String condition=weather.getInfo().getDay()[0];
if(condition.equals("0")){
holder.imageview_codition.setImageResource(R.drawable.sunny);
}elseif(condition.equals("1")){
holder.imageview_codition.setImageResource(R.drawable.cloudy);
}elseif(condition.equals("2")){
holder.imageview_codition.setImageResource(R.drawable.lotcloudy);
}elseif(condition.equals("3")){
holder.imageview_codition.setImageResource(R.drawable.rain);
}
holder.textview_condition.setText(weather.getInfo().getDay()[1]);
holder.textview_temp.setText(weather.getInfo().getDay()[2]+"/"+weather.getInfo().getNight()[2]);
holder.textview_weekday.setText(weather.getWeek());
return convertView;
}
public classViewHolder{
ImageViewimageview_codition=null;
TextViewtextview_weekday=null;
TextViewtextview_condition=null;
TextViewtextview_temp=null;
}
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
public class MainActivity extends Activity {
PullToRefreshListViewrefreshListView = null;
WeatherAdapter adapter= null;
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialUI();
}
private voidinitialUI() {
adapter = newWeatherAdapter(this);
refreshListView =(PullToRefreshListView) findViewById(R.id.refresh_listview);
refreshListView.setAdapter(adapter);
// 加载数据
HttpManager.loadWeathers(this,"北京", newLoadWeatherListener() {
@Override
public voidOnWeatherLoadEnd(WeatherBean bean) {
List<Weather>weathers = bean.getResult().getData()
.getWeather();
adapter.addWeathers(weathers,true);
}
});
// //实现下拉刷新功能
//refreshListView.setOnRefreshListener(new
//OnRefreshListener<ListView>() {
// @Override
// public voidonRefresh(final PullToRefreshBase<ListView> refreshView)
// {
// //在该回调方法中加入网络请求的代码,请求服务器端的新的数据
// //以实现下拉刷新
//
//refreshListView.onRefreshComplete();
//HttpManager.loadWeathers(MainActivity.this,
// "北京",
// new LoadWeatherListener(){
// @Override
// public voidOnWeatherLoadEnd(WeatherBean bean) {
//
//List<Weather> weathers=bean.getResult().getData().getWeather();
//adapter.addWeathers(weathers, false);
// }
// });
// }
// });
refreshListView.setMode(Mode.BOTH);
// 实现下拉刷新和上拉加载
refreshListView.setOnRefreshListener(newOnRefreshListener2<ListView>() {
public voidonPullDownToRefresh(final PullToRefreshBase<ListView> refreshView) {
// 实现下拉刷新
refreshListView.onRefreshComplete();
HttpManager.loadWeathers(MainActivity.this,"北京", newLoadWeatherListener() {
@Override
publicvoid OnWeatherLoadEnd(WeatherBean bean) {
List<Weather>weathers=bean.getResult().getData().getWeather();
adapter.addWeathers(weathers,false);
refreshView.getLoadingLayoutProxy(true,false)
.setLastUpdatedLabel("正在加载内容.....");
}
});
}
@Override
public voidonPullUpToRefresh(final PullToRefreshBase<ListView> refreshView) {
refreshListView.onRefreshComplete();
// 实现上拉加载
HttpManager.loadWeathers(MainActivity.this,"北京", newLoadWeatherListener() {
@Override
publicvoid OnWeatherLoadEnd(WeatherBean bean) {
List<Weather>weathers=bean.getResult().getData().getWeather();
adapter.addWeathers(weathers,false);
refreshView.getLoadingLayoutProxy(false,true).setPullLabel("上拉加载中......");
}
});
}
});
}
}
//解析自定义的布局文件转换成一个view对象
realtime_view=getLayoutInflater().inflate(R.layout.realweather_layout,
listview_weather,
false);
adapter=newWeatherAdapter(this);
pullToRefreshListView=(PullToRefreshListView)findViewById(R.id.pull_refresh_listview);
listview_weather=pullToRefreshListView.getRefreshableView();
listview_weather.setAdapter(adapter);
//将view对象作为listview的Header
listview_weather.addHeaderView(realtime_view);
绘制折线图:
使用achartengine-1.1.0.jar
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lineView();
}
// 折线图
public void lineView(){
// 同样是需要数据dataset和视图渲染器renderer
XYMultipleSeriesDatasetmDataset = new XYMultipleSeriesDataset();
XYSeries series =new XYSeries("第一条线");
series.add(1, 6);
series.add(2, 5);
series.add(3, 7);
series.add(4, 4);
mDataset.addSeries(series);
XYSeries seriesTwo= new XYSeries("第二条线");
seriesTwo.add(1,4);
seriesTwo.add(2,6);
seriesTwo.add(3,3);
seriesTwo.add(4,7);
mDataset.addSeries(seriesTwo);
XYMultipleSeriesRenderermRenderer = new XYMultipleSeriesRenderer();
// 设置图表的X轴的当前方向
mRenderer
.setOrientation(XYMultipleSeriesRenderer.Orientation.HORIZONTAL);
mRenderer.setXTitle("日期");// 设置为X轴的标题
mRenderer.setYTitle("价格");// 设置y轴的标题
mRenderer.setAxisTitleTextSize(20);//设置轴标题文本大小
mRenderer.setChartTitle("价格走势图");// 设置图表标题
mRenderer.setChartTitleTextSize(30);//设置图表标题文字的大小
mRenderer.setLabelsTextSize(18);//设置标签的文字大小
mRenderer.setLegendTextSize(20);//设置图例文本大小
mRenderer.setPointSize(10f);//设置点的大小
mRenderer.setYAxisMin(0);//设置Y轴起点
mRenderer.setYAxisMax(15);
mRenderer.setYLabels(10);//设置Y轴刻度个数(貌似不太准确)
mRenderer.setXAxisMax(5);
mRenderer.setShowGrid(true);//显示网格
// 将x标签栏目显示如:1,2,3,4替换为显示1月,2月,3月,4月
mRenderer.addXTextLabel(1,"1月");
mRenderer.addXTextLabel(2,"2月");
mRenderer.addXTextLabel(3,"3月");
mRenderer.addXTextLabel(4,"4月");
mRenderer.setXLabels(0);//设置只显示如1月,2月等替换后的东西,不显示1,2,3等
mRenderer.setMargins(newint[] {20, 30, 30, 20 });// 设置视图位置上左下右
XYSeriesRenderer r= new XYSeriesRenderer();// (类似于一条线对象)
r.setColor(Color.BLUE);//设置颜色
r.setPointStyle(PointStyle.CIRCLE);//设置点的样式
r.setFillPoints(true);//填充点(显示的点是空心还是实心)
r.setDisplayChartValues(true);//将点的值显示出来
r.setChartValuesSpacing(10);//显示的点的值与图的距离
r.setChartValuesTextSize(25);//点的值的文字大小
//r.setFillBelowLine(true);//是否填充折线图的下方
//r.setFillBelowLineColor(Color.GREEN);//填充的颜色,如果不设置就默认与线的颜色一致
r.setLineWidth(3);//设置线宽
mRenderer.addSeriesRenderer(r);
XYSeriesRendererrTwo = new XYSeriesRenderer();// (类似于一条线对象)
rTwo.setColor(Color.GRAY);//设置颜色
rTwo.setPointStyle(PointStyle.CIRCLE);//设置点的样式
rTwo.setFillPoints(true);//填充点(显示的点是空心还是实心)
rTwo.setDisplayChartValues(true);//将点的值显示出来
rTwo.setChartValuesSpacing(10);//显示的点的值与图的距离
rTwo.setChartValuesTextSize(25);//点的值的文字大小
//rTwo.setFillBelowLine(true);//是否填充折线图的下方
//rTwo.setFillBelowLineColor(Color.GREEN);//填充的颜色,如果不设置就默认与线的颜色一致
rTwo.setLineWidth(3);//设置线宽
mRenderer.addSeriesRenderer(rTwo);
GraphicalView view= ChartFactory.getLineChartView(this, mDataset,
mRenderer);
view.setBackgroundColor(Color.BLACK);
setContentView(view);
}
}
===========================================================
- 天气预报项目学习总结
- 天气预报项目学习总结
- 项目总结-天气预报(电视)
- 天气预报项目学习总结(- ButterKnife - Retrofit 2.0(okhttp) - Rxjava - Jackson - Ormlite - Mosby简单使用总结)
- Android项目->天气预报项目
- WebService学习总结 四 WebService开发天气预报客户端程序
- Android阶段学习总结 7.25-7.29 天气预报 知识点
- Android[项目] Android天气预报
- 分享android天气预报项目
- 安卓小项目之天气预报
- 天气预报调用网址总结
- 天气预报API总结
- iOS天气预报模块总结
- android学习天气预报系统
- PCBAImport项目学习总结
- 项目管理学习总结
- Web项目学习总结
- Android完整项目_天气预报
- 一、设计模式概述
- 机器学习之分类算法之朴素贝叶斯分类
- ambari-agent启动报错
- Jquery - 属性操作
- 10B21线材盘条盘圆
- 天气预报项目学习总结
- MySQL 5.7原生JSON格式支持
- Java之命令模式(Command Pattern)
- Fxxking dataStructure_ 集合的交并差运算
- Android编译环境搭建-ubuntu下eclipse环境
- Uva1218 Perfect Services
- 算法设计第一章 水仙花数和北斗七星数
- 使用SHA256校验下载的文件
- ARM裸机-S5PV210简析