android独特的天气预报

android独特的天气预报

package com.dchan.myweather;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Queue;

import com.dchan.SharedPreferences.MySharedPreferences;
import com.dchan.adpater.WeatherAdapter;
import com.dchan.http.DownLoad;
import com.dchan.jsonreader.JsonForReader;
import com.dchan.model.TodayWeatherModel;
import com.dchan.model.WeatherModel;
import com.dchan.mylayout.MyLayout;
import com.dchan.slidinglayout.SlidingLayout;
import com.edchan.myweather.R;

import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.util.JsonReader;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
	/*
	 * 滑动布局
	 */
	SlidingLayout slidingLayout;
	/*
	 * 主界面
	 */
	View weatherContent;
	/*
	 * 城市列表
	 */
	ListView cityList;
	/*
	 * 一个城市当天以及未来几天的天气
	 */
	ListView cityWeatherList;
	/*
	 * 左边按钮
	 */
	ImageButton button1;
	/*
	 * 右边按钮
	 * 
	 */
	ImageButton button2;
	SwipeRefreshLayout swipeRefreshLayout;
	
	
	/*
	 * 当天的日期
	 */
	TextView todayText;
	/*
	 * 城市
	 */
	TextView city;
	/*
	 * 天气图片
	 */
	ImageView imageView;
	/*
	 * 天气文字
	 */
	TextView weatherText;
	/*
	 * 平均温度
	 */
	TextView evrTemp;
	/*
	 * 最高温度
	 */
	TextView highTemp;
	/*
	 * 最低温度
	 */
	TextView lowTemp;
	
	/*
	 * 
	 * 点击增加城市
	 */
	ImageButton addCityButton;
	
	TodayWeatherModel todaymodel;
	MyHandler myHandler;
	public static final int setWeatherList=1;//通知handler更新listview
	public static final int REFLASHCITY=2;//通知handler更新城市列表
	public static long time=0;//用于处理双击退出
	
	MyBroadcast broadcast=new MyBroadcast();
	
	String theCity;//当前显示的城市
	ArrayAdapter<String> cityAdapter;
	
	//MySharedPreferences myCities=new MySharedPreferences(this);
	ArrayList<String> nameList;//所有的城市
	
	SharedPreferences sharedPreferences;
	private String theFirst="0";//是否第一次启动
	
	LinearLayout todayLinearLayout;//今天天气的布局,用于点击弹出更多信息
	TextView cold;//感冒描述
	TextView windStrength;//风力
	TextView windDirection;//风向	
	LayoutInflater inflater;
	View view;//moreInformation的layout
	AlertDialog dialog;//moreInformation的对话框
	
	ProgressDialog progressDialog;//用于加载时显示
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		inflater=getLayoutInflater();
		view=inflater.inflate(R.layout.more_information, null);
		
		slidingLayout=(SlidingLayout)findViewById(R.id.sliding);
		weatherContent=(LinearLayout)findViewById(R.id.mycontent);		
		button1=(ImageButton)findViewById(R.id.add_city_button);
		button2=(ImageButton)findViewById(R.id.add_more_button);		
		cityList=(ListView)findViewById(R.id.city_list);
		cityWeatherList=(ListView)findViewById(R.id.city_weadther_list);
		slidingLayout.setScrollEvent(cityWeatherList);
		
		todayText=(TextView)findViewById(R.id.thedate);
		city=(TextView)findViewById(R.id.city);
		imageView=(ImageView)findViewById(R.id.todayweather);
		weatherText=(TextView)findViewById(R.id.todayweathertext);
		evrTemp=(TextView)findViewById(R.id.todayvertemp);
		highTemp=(TextView)findViewById(R.id.todayhightemp);
		lowTemp=(TextView)findViewById(R.id.todaylowtemp);
		
		addCityButton=(ImageButton)findViewById(R.id.add_city_button);
		
		swipeRefreshLayout=(SwipeRefreshLayout)findViewById(R.id.swipe_container);
		swipeRefreshLayout.setColorScheme(android.R.color.holo_blue_light, android.R.color.holo_red_dark, android.R.color.holo_purple, android.R.color.holo_green_light);
		
		todayLinearLayout=(LinearLayout)findViewById(R.id.todayweatherlayout);
		cold=(TextView)view.findViewById(R.id.cold);
		windStrength=(TextView)view.findViewById(R.id.wind_strength);
		windDirection=(TextView)view.findViewById(R.id.wind_direction);
		dialog=new AlertDialog.Builder(MainActivity.this).setView(view).setTitle("                更多信息").create();
		
		progressDialog=new ProgressDialog(this);
		
		myHandler=new MyHandler();
		
		sharedPreferences=getSharedPreferences("city", MODE_PRIVATE);
		/*SharedPreferences.Editor editor1=sharedPreferences.edit();
		editor1.clear();
		editor1.commit();*/
		theCity=sharedPreferences.getString("theCity", "深圳");
		theFirst=sharedPreferences.getString("theFirst", "0");
		if(theFirst.equals("0")){
			theFirst="1";
			SharedPreferences.Editor editor=sharedPreferences.edit();
			editor.putString("theFirst", theFirst);
			editor.commit();
			
			Intent intent=new Intent();
			intent.setClass(MainActivity.this, BeginActivity.class);
			startActivity(intent);
		}
		/*SharedPreferences.Editor editor=sharedPreferences.edit();
		editor.clear();
		editor.commit();*/
		
		
		
		nameList=getCityList();
		
		if(nameList!=null){
			System.out.println("nameList is not null");
			ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, nameList);			
			cityList.setAdapter(adapter);
		}
		
		todayLinearLayout.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dialog.show();
			}
		});
				
		swipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
			
			@Override
			public void onRefresh() {
				startReflashUI();
				new Thread(){
					public void run(){
						try {
							sleep(5000);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						swipeRefreshLayout.setRefreshing(false);
					}
				}.start();
			}
		});
		
		
		startReflashUI();		
		
		addCityButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				System.out.println("!!!!!!!!!!!");
				Intent intent=new Intent(MainActivity.this, AddCityActivity.class);
				startActivity(intent);
			}
		});
		
		/*
		 * city列表,用于删除城市
		 */
		cityList.setOnItemLongClickListener(new OnItemLongClickListener() {

			@Override
			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				
				String key=nameList.get(arg2);
				nameList.remove(arg2);
				deleteCity(key);
				Message msg=new Message();
				msg.what=REFLASHCITY;
				myHandler.sendMessage(msg);
				return true;
			}
		});
		/*
		 * 点击要查看city的天气
		 */
		cityList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				theCity=nameList.get(arg2);
				SharedPreferences.Editor editor=sharedPreferences.edit();
				editor.putString("theCity", theCity);
				editor.commit();
				startReflashUI();
				slidingLayout.scrollToRightLayout();
			}
		});
		
		registerReceiver(broadcast, getIntentFilter());
	}
	/*
	 * handler处理UI事件
	 */
	class MyHandler extends Handler{

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			System.out.println("inide");
			switch (msg.what) {
			case setWeatherList:
				System.out.println("setWeatherList");
				ArrayList<WeatherModel> weatherlist=(ArrayList<WeatherModel>) msg.obj;
				WeatherAdapter adapter=new WeatherAdapter(MainActivity.this, weatherlist);
				cityWeatherList.setAdapter(adapter);
				
				todayText.setText(weatherlist.get(0).getDay());
				city.setText(weatherlist.get(0).getCity());
				imageView.setBackgroundResource(weatherlist.get(0).findImageResouce(weatherlist.get(0).getWeatherImage()));
				weatherText.setText(weatherlist.get(0).getWeatherImage());
				evrTemp.setText(weatherlist.get(0).getVerTemp());
				highTemp.setText(weatherlist.get(0).getHighTemp());	
				lowTemp.setText(weatherlist.get(0).getLowTemp());
				
				/*
				 * 对话框的内容
				 */
				windStrength.setText(weatherlist.get(0).getWindStrength());
				windDirection.setText(weatherlist.get(0).getWindDirection());
				cold.setText(weatherlist.get(0).getCold());
				
				//progressDialog.dismiss();
				break;
			case REFLASHCITY:
				System.out.println("REFLASHCITY");
				cityAdapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, nameList);
				cityList.setAdapter(cityAdapter);
				cityAdapter.notifyDataSetChanged();
				startReflashUI(); 
			break;
			default:
				break;
			}
		}		
	}
	
	
	public IntentFilter getIntentFilter(){
		IntentFilter filter=new IntentFilter();
		filter.addAction("CITYSELECT");
		return filter;
	}
	class MyBroadcast extends BroadcastReceiver{

		@Override
		public void onReceive(Context context, Intent intent) {
			String action=intent.getAction();
			SharedPreferences.Editor editor=sharedPreferences.edit();
			if(action.equals("CITYSELECT")){
				String city=intent.getStringExtra("city");
				theCity=city;
				if(theCity!=null){
					System.out.println(theCity);
					editor.putString(city, city);
					editor.putString("theCity", theCity);
					editor.commit();
				}
				System.out.println("isSet");
				nameList.add(city);
				for(int i=0;i<nameList.size();i++){
					System.out.println("!!!!!"+nameList.get(i));
				}
				Message msg=myHandler.obtainMessage();
				msg.what=REFLASHCITY;
				myHandler.sendMessage(msg);
				
			}
			
		}		
	}
	
	public void startReflashUI(){
		new Thread(){

			@Override
			public void run() {
				super.run();
				/*Looper.prepare();
				progressDialog.show(MainActivity.this, "loading", "loading...");
				Looper.loop();*/
				
				DownLoad downLoad=new DownLoad(MainActivity.this);
				String b="http://wthrcdn.etouch.cn/weather_mini?city=";
				try {
					if(theCity!=null){
						String c=URLEncoder.encode(theCity, "UTF-8");
						b=b+c;
					}else{
						String c=URLEncoder.encode("深圳", "UTF-8");
						b=b+c;
					}
					
					String jsonMessage=downLoad.downLoadFromNet(b);
					JsonForReader reader=new JsonForReader(jsonMessage);
					reader.read();
					ArrayList<WeatherModel> weatherlist=reader.getListWeather();
					todaymodel=reader.getTodayWeatherModel();
					Message msg=myHandler.obtainMessage();
					msg.what=setWeatherList;
					msg.obj=weatherlist;
					myHandler.sendMessage(msg);
					
					
				} catch (UnsupportedEncodingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			
		}.start();	
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		
		unregisterReceiver(broadcast);
	}
	
	/*
	 * 查找城市
	 */
	public ArrayList<String> getCityList(){
		ArrayList<String> cityList1=new ArrayList<String>();
		Map<String,String> map=(Map<String, String>) sharedPreferences.getAll();
		Collection<String> collection=map.values();
		Iterator<String> iterator=collection.iterator();
		
		while(iterator.hasNext()){
			String city=iterator.next();
			System.out.println("城市----"+city);	
			if(!(city.equals("0")||city.equals("1"))){
				cityList1.add(city);
			}			
		}
		//用一个HashSet来将cityList1里面的重复元素去除
		HashSet<String> h=new HashSet<String>(cityList1);
		cityList1.clear();		
		cityList1.addAll(h);
		return cityList1;	
	}
	
	/*
	 * 增加城市
	 */
	public boolean setCityList(String key,String value){
		SharedPreferences.Editor editor=sharedPreferences.edit();
		editor.putString(key, value);
		boolean isSet=editor.commit();
		return isSet;
	}
	/*
	 * 删除城市
	 */
	public boolean deleteCity(String key){
		SharedPreferences.Editor editor=sharedPreferences.edit();
		editor.remove(key);
		boolean isDelete=editor.commit();
		return isDelete;
	}
	
	/*
	 * 双击退出
	 * @see android.app.Activity#onKeyDown(int, android.view.KeyEvent)
	 */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		switch (keyCode) {
		case KeyEvent.KEYCODE_BACK:
			if(System.currentTimeMillis()-time>2000){
				Toast.makeText(this, "退出?", 1000).show();
				time=System.currentTimeMillis();
			}else{
				finish();
			}
			
			return false;

		default:
			break;
		}
		return super.onKeyDown(keyCode, event);
	}
}
源码下载:http://download.csdn.net/detail/zhupengqq/9584314



本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

cocoapods的安装和使用 总结 - 2016-07-24 14:07:48

一、CocoaPods 是什么? CocoaPods 是开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具。利用CocoaPods,可以定义自己的依赖关系 (称作 pods),并且随着时间的变化,以及在整个开发环境中对第三方库的版本管理非常方便。 CocoaPods 背后的理念主要体现在两个方面。首先,在工程中引入第三方代码会涉及到许多内容。针对 Objective-C 初级开发者来说,工程文件的配置会让人很沮丧。在配置buildphases和linker flags过程中,会引起许多人为因
最近有一段时间没写博客了,一方面是工作比较忙,一方面也着实本人水平有限,没有太多能与大家分享的东西,也就是在最近公司要做一个抢红包的功能,老板发话了咋们就开干呗,本人就开始在网上收集资料,经过整理和实践,总算完美实现了功能,这里拿出本人一点微薄的成就与大家分享。 首先界面是这样的 开启自动抢红包只需点击相应的选项即可,下面我们进入正题,实现自动抢红包的原理,其实是借助android下的一个辅助服务AccessibilityService,这个服务是google公司为许多Android使用者因为各种情况导致
在实现该控件之前,先说一下该控件的难度, 一、   每个item中如果有RadioButton之类,可以focus焦点的,点击效果可能会失效   二、无限的滚动   下面是效果图: 实现上图的效果,一共自定义了两个 控件,viewpager+底部导航图标 下面我先来讲解一下,viewpager的实现: 1.初始化 pre name="code" class="java"/** 点击按下的坐标 **/PointF downP = new PointF();/** 当前按下的坐标 **/PointF curP

Android-下拉刷新库 - 2016-07-24 14:07:44

前言 入职接近半个多月,有几天空闲,所以想着能不能自己实现一个库来练练手,因为之前一直想要实现下拉刷新的功能,因此就有了这样一个自制的下拉刷新库——RefreshWidgetLib. 关于下拉刷新 下拉刷新,作为一个几乎每个应用都会出现的一种控件,不言而喻,它对于提高用户体验有着很重要的作用,而且也已经成为了人们习惯的一种操作。说起下拉刷新这种设计,最早的引入者是在2008年上线的Tweetie,Tweetie引入了如今随处可见的“下拉刷新”设计,不仅有多达数百款App Store应用使用这种设计,就连苹

从AIDL看Android跨进程通信 - 2016-07-24 14:07:38

AIDL是Android实现IPC的一种重要的方式,理解它的原理对理解Android进程间通信有很大的帮助。AIDL的定义,已经有很多介绍的文章了,这里就不做详解了。我们直接从实例入手来分析AIDL实现原理。 AIDL的使用 首先需要定义AIDL接口IMyService.aidl: // IMyService.aidl package com.chuck.aidldemo; // Declare any non-default types here with import statements inter
OC与Swift两种实现方式基本上区别不大,主要是在一些对象或方法的调用方式不同 OC代码样式: self.view.backgroundColor = [UIColor blackColor];          //加载颗粒状的火花图片     CAEmitterLayer *emitterLa = [CAEmitterLayer layer];     emitterLa.emitterPosition = CGPointMake(self.view.bounds.size.width/2, sel
前言 相信很多朋友在开发中都会遇到图片上传的情况,尤其是多图上传,最 经典的莫过于微信的图片选择了。所有很多情况下会使用到多图选择。 所以就有了这篇文章,今天抽点时间写了个控件。 支持自定义选择图片的样式 支持设置图片选择数量 支持图片预览,删除 支持图片拍照 先来看看效果 实现分析 假如不定义控件,我们要实现这样一个功能,无非是写个GridView在item点击的时候去显示图片进行选择,在返回界面的时候进行GridView的数据刷新。我们把这些逻辑写在我们自定义的GridView中,就成了一个新的控件。
在360对DroidPlugin的特点介绍中有云: 插件的四大组件完全不需要在Host程序中注册,支持Service、Activity、BroadcastReceiver、ContentProvider四大组件。 实现了进程管理,插件的空进程会被及时回收,占用内存低。 之所以支持Service,Activity,ContentProvider三大组件,是因为DroidPlugin在AndroidManifest文件中预先注册了8个运行插件的进程,每个进程预注册Service一个, ContentProvi
本篇介绍ListView控件,这是Android中比较重要也比较复杂的控件,这里只谈到使用ViewHolder机制优化即可。 一、ListView简介 ListView是Android系统中显示列表的控件,每个ListView都可以包含很多个列表项。 二、ListView的使用 概念不多说,直接来介绍使用方法。 ListView中比较复杂的是数据适配器,其作用是把复杂的数据(数组、链表、数据库、集合等)填充在指定视图界面,是连接数据源和视图界面的桥梁。常见的Android原生的适配器有ArrayAdapt
欢迎转载,转载请注明出处: http://blog.csdn.net/dmk877/article/details/51912104   相信不管做了多长时间开发的人都用过Tween动画,从刚开始工作到现在我也是用了N次Tween动画,但是每一次使用总感觉掌握的不够全面,所以花了点时间详细的总结了下Tween动画,其实在android中熟练掌握动画,能够帮助我们实现一些非常酷炫的效果从而使我们的app在交互或者用户体验上有一个更好的体验,鉴于此详细的学习动画还是很有必要的,相信通过本篇的学习大家会对Twe