引导页面,多个城市的天气,可以通过滑动来翻阅。

先看下截图:

1、城市天气界面

2、引导界面

应用引导页面

package org.qxj.iweather.page;

import org.qxj.iweather.R;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ViewFlipper; public class Welcome extends Activity { private static final String TAG = "Welcome";
private SharedPreferences shared = null;
private SharedPreferences.Editor edit = null;
private LinearLayout layout = null;
private ViewFlipper flip = null;
private LayoutParams match = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT);
private String isFirst = "false";
private Intent intent = null; class TurnPage implements Runnable { @Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(5000);
TurnToMain();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.shared = super.getSharedPreferences("IWeather", MODE_PRIVATE);
this.edit = this.shared.edit(); this.layout = new LinearLayout(this);
this.layout.setOrientation(LinearLayout.VERTICAL); this.flip = new ViewFlipper(this);
this.layout.addView(this.flip, match);
this.layout.setBackgroundResource(R.drawable.welcome);
super.addContentView(this.layout, match); isFirst = this.shared.getString("isFirst", "true");
Log.i(TAG, "isFirst: " + isFirst);
if ("true".equals(isFirst)) {
this.edit.putString("isFirst", "false");
this.edit.commit();
new Thread(new TurnPage()).start();
} else {
// 进行跳转
TurnToMain();
} } public void TurnToMain() {
// 进行跳转
intent = new Intent(Welcome.this, Main.class);
startActivity(intent);
// 销毁该Activity,返回的时候,不会返回该界面。
this.finish();
} }

主页面

package org.qxj.iweather.page;

import org.qxj.iweather.R;
import org.qxj.iweather.Contents.IWeather;
import org.qxj.iweather.net.HttpHelper; import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout; public class Main extends Activity implements OnGestureListener { private IWeather iWeather = null;
private LinearLayout layout = null;
private GestureDetector detector;
private LayoutParams match = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT); @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.layout = new LinearLayout(this);
detector = new GestureDetector(this);
this.iWeather = new IWeather(this);
this.layout.addView(this.iWeather.flip, match);
this.addContentView(this.layout, match);
iWeather.flip.addView(new PageLayout(this, "101301301"));
iWeather.flip.addView(new PageLayout(this, "101010100"));
iWeather.flip.addView(new PageLayout(this, "101260101"));
iWeather.flip.addView(new PageLayout(this, "101190501"));
iWeather.flip.addView(new PageLayout(this, "101190101"));
iWeather.flip.addView(new PageLayout(this, "101170101"));
} @Override
public boolean onTouchEvent(MotionEvent event) {
return this.detector.onTouchEvent(event);
} @Override
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
} @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
if (e1.getX() - e2.getX() > 80) {
iWeather.flip.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_left_in));
iWeather.flip.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_left_out));
iWeather.flip.showNext();
return true;
} else if (e1.getX() - e2.getX() < -80) {
iWeather.flip.setInAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_right_in));
iWeather.flip.setOutAnimation(AnimationUtils.loadAnimation(this,
R.anim.push_right_out));
iWeather.flip.showPrevious();
return true;
}
return false;
} @Override
public void onLongPress(MotionEvent arg0) {
// TODO Auto-generated method stub } @Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
float arg3) {
// TODO Auto-generated method stub
return false;
} @Override
public void onShowPress(MotionEvent arg0) {
// TODO Auto-generated method stub } @Override
public boolean onSingleTapUp(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
} }

自定义的pageLayout

package org.qxj.iweather.page;

import org.qxj.iweather.R;
import org.qxj.iweather.model.Weather;
import org.qxj.iweather.net.HttpHelper; import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast; public class PageLayout extends LinearLayout { private Weather weather = null;
private Context context = null;
private TextView temperature = null;
private TextView city = null;
private TextView statues = null;
private TextView date = null;
public Handler hander = new Handler() { @Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch (msg.what) {
case 1:
weather = (Weather) msg.obj;
init();
break;
case 0:
Toast.makeText(context, "数据操作失败!", Toast.LENGTH_SHORT).show();
break;
}
} }; public PageLayout(Context context, String city) {
super(context);
this.context = context;
new Thread(new HttpHelper(city, this)).start();
} public PageLayout(Context context, AttributeSet attrs, String city) {
super(context, attrs);
this.context = context;
new Thread(new HttpHelper(city, this)).start();
} public PageLayout(Context context, AttributeSet attrs, int defStyle, String city) {
super(context, attrs, defStyle);
this.context = context;
new Thread(new HttpHelper(city, this)).start();
} private void init() {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.page_layout, this);
this.temperature = (TextView) findViewById(R.id.tempearture);
this.city = (TextView) findViewById(R.id.city);
this.statues = (TextView) findViewById(R.id.statues);
this.date = (TextView) findViewById(R.id.date); this.temperature.setText(this.weather.getTemp1());
this.city.setText(this.weather.getCity());
this.statues.setText(this.weather.getWeather1());
this.date.setText(this.weather.getDate_y());
this.setBackgroundByWeather(this.weather.getWeather1());
} /**
* 设置屏幕背景
*/
private void setBackgroundByWeather(String w) {
if (w.indexOf("雪") != -1) {
// 有雪的天气
this.setBackgroundResource(R.drawable.snow);
} else if (w.indexOf("雨") != -1) {
// 下雨天
this.setBackgroundResource(R.drawable.rain);
} else if (w.indexOf("晴") != -1) {
// 晴
this.setBackgroundResource(R.drawable.sun);
} else if (w.indexOf("阴") != -1) {
// 阴天
this.setBackgroundResource(R.drawable.water);
} else {
this.setBackgroundResource(R.drawable.sun);
}
} }

完整代码:

http://download.csdn.net/detail/niitqin/6472535

Android 实现简单天气应用的更多相关文章

  1. Android 实现简单音乐播放器(二)

    在Android 实现简单音乐播放器(一)中,我介绍了MusicPlayer的页面设计. 现在,我简单总结一些功能实现过程中的要点和有趣的细节,结合MainActivity.java代码进行说明(写出 ...

  2. Android 实现简单音乐播放器(一)

    今天掐指一算,学习Android长达近两个月了,今天开始,对过去一段时间的学习收获以及遇到的疑难杂症做一些总结. 简单音乐播放器是我自己完成的第一个功能较为完整的APP,可以说是我的Android学习 ...

  3. Android课程---Android Studio简单设置

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings-->Appearance-->Theme, ...

  4. Android实现简单音乐播放器(MediaPlayer)

    Android实现简单音乐播放器(MediaPlayer) 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 工程内容 实现一个简单的音乐播放器,要求功能 ...

  5. Android实现简单拨号器

    Android实现简单拨号器 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 界面布局只有GridLayout和EditText两个控件,全部 ...

  6. 【转】Android Studio简单设置

    原文网址:http://ask.android-studio.org/?/article/14 Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以 ...

  7. Android发展简单介绍

    Android一词的本义指“机器人”,同一时候也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...

  8. android JNI 简单demo(2)它JNI demo 写

    android JNI 简单demo(2)它JNI demo 写 一.搭建Cygwin 环境:http://blog.csdn.net/androidolblog/article/details/25 ...

  9. Android Studio简单设置(转)

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Th ...

随机推荐

  1. BZOJ 1565: [NOI2009]植物大战僵尸( 最小割 )

    先拓扑排序搞出合法的, 然后就是最大权闭合图模型了.... --------------------------------------------------------------------- ...

  2. MySql学习之varchar类型

    MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定),在 MySQL5.0以上的版本中,varchar数据 ...

  3. zoj 3792 Romantic Value

    题目链接 求最小割的值, 以及割边最少的情况的边数. 先求一遍最小割, 然后把所有割边的权值变为1, 其他边变成inf, 在求一遍最小割, 此时求出的就是最少边数. Inf打成inf  WA了好几发. ...

  4. MySQL my.cnf 参数说明

    MySQL 5.5.13 参数说明: [client] character-set-server = utf8 port    = 3306 socket  = /data/mysql/3306/my ...

  5. linux系统性能监控常用命令

      一.Linux服务器性能关注点 1)CPU -> load:表示cpu在一段时间内正在处理以及等待处理的任务之和统计信息,简单可理解为cpu正处理的线程数和能同时处理的线程数的比值.一般认为 ...

  6. Effective C++学习笔记——构造/析构/拷贝运算

    条款9:决不再构造和析构过程中调用virtual函数,包括通过函数间接调用virtual函数. 应用:想在一个继承体系中,一个derived class被创建时,某个调用(例如生成相应的日志log)会 ...

  7. java 文件处理

    package javax.org.path; import java.math.BigDecimal; /** * @Author:jilongliang * @Date :2013-6-18 *  ...

  8. 注册表与盘符(转victor888文章 )

    转自: http://blog.csdn.net/loulou_ff/article/details/3769479     写点东西,把这阶段的研究内容记录下来,同时也给研究相关内容的同志提供参考, ...

  9. C++面试经常涉及的概念1

    1.new.delete.malloc.free关系 delete会调用对象的析构函数,和new对应.free只会释放内存,new调用构造函数.malloc与free是C++/C语言的标准库函数,ne ...

  10. HDU 5800 To My Girlfriend(单调DP)

    [题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5800 [题目大意] 给出一个容量上限s,f[i][j][k][l][m]表示k和l两个物品不能选,i ...