一.项目开发概要
1.模拟新浪微博随便看看项目效果图!




.
2.开发概要
本项目是模拟新浪微博随便看看,重写了ListView控件和BaseAdapter适配器中的方法,添加了头部刷新功能,ListView中的数据中图片、昵称、文本都是在values目录中定义的arrays.xml资源,日期和人气则是通过java API中的Date、Random类模拟出来的。
二.开发步骤
1.项目结构图片


2.步骤
1.建立新浪微博随便看看主界面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/liner"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="6dip"android:background="#FA8072"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="随便看看"android:textSize="15sp"android:textColor="@android:color/white"/></LinearLayout><bzu.edu.hou.view.MyListViewandroid:id="@+id/myListView1"android:layout_width="match_parent"android:layout_height="wrap_content" ></bzu.edu.hou.view.MyListView>

2.获取各种数据,包括图片,对话,时间,人气值等一些列数据

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:padding="10dip"android:orientation="vertical" ><RelativeLayout android:layout_width="match_parent"android:layout_height="wrap_content"><ImageView android:id="@+id/head_img"android:src="@drawable/p1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dip"android:layout_alignParentLeft="true"/><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@+id/head_img"android:layout_marginLeft="7dip"android:orientation="vertical"><RelativeLayout android:layout_width="match_parent"android:layout_height="wrap_content"><TextView android:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:textColor="#FF6666"android:textSize="16sp"android:typeface="sans"android:textStyle="bold"android:text="李小璐"/><TextView android:id="@+id/time"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_toRightOf="@id/name"android:layout_alignBottom="@id/name"android:layout_marginLeft="5dip"android:textColor="#696969"android:textSize="12sp"android:text="13:23"/><TextView android:id="@+id/rq"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:textSize="9sp"android:text="234人气"/></RelativeLayout><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="5dip"><TextView android:id="@+id/article"android:layout_width="match_parent"android:layout_height="wrap_content"android:minHeight="50px"android:textSize="12sp"android:text="华晨第二款SUV中华V3于5月7日晚正式上市,售价6.57-10.27万元,其主要竞争对手有瑞风S3、长安CS35等车型。中华V3这款小型SUV搭载1.5L和1.5T两种动力,而后者会出现在V3S即运动版车型上。"/></LinearLayout></LinearLayout>
<resources><array name="head_photo"><item>@drawable/p1</item><item>@drawable/p2</item><item>@drawable/p3</item><item>@drawable/p4</item><item>@drawable/p5</item><item>@drawable/p6</item><item>@drawable/p7</item><item>@drawable/p8</item><item>@drawable/p9</item><item>@drawable/p10</item>    </array><string-array name="article"><item>@string/p1</item><item>@string/p2</item><item>@string/p3</item><item>@string/p4</item><item>@string/p5</item><item>@string/p6</item><item>@string/p7</item><item>@string/p8</item><item>@string/p9</item><item>@string/p10</item></string-array><string-array name="name"><item>李小璐</item><item>游刃有鱼</item><item>洒脱不羁的猪</item><item>划破夜空的星星</item><item>闪耀于群山之上</item><item>光辉永存</item><item>抑制力之光</item><item>斗破奥特</item><item>FFF团团长</item><item>五火球教教主</item> </string-array>
<resources><string name="app_name">ListViewProject</string><string name="action_settings">Settings</string><string name="hello_world">Hello world!</string><string name="p1"> 心有猛虎,细嗅蔷薇。盛宴之后,泪流满面.</string><string name="p2">  月淡,风凄,一曲恒古的琵琶,飘酸了今生的眷恋。思念踏夜而来,滴滴流动在月海,纷纷扬扬落满成空的夜,丝丝声声刻留下的印记,碰撞着心底的蠢动,泪水溢满双眸,恣意地流下,似弦乐如泣如诉。</string><string name="p3"> 饮月千尺,寂夜成相思,难挥情丝一缕。昔日片断,成一生细读的忧伤。经事难忘,恒久的思念扯成根根丝线。恨夜难成眠,洒下一地的思念,剪瘦一弯冷月,细数跃然于眼,结缕缕情丝.</string><string name="p4"> 今夜;踏碎月光,任往事放飞,洒落在每一根琴弦,触动声声如诉。柔碎怀中的思绪,弥漫在夜色,化作声声的低唤,缠绵流连成细瘦得忧伤,藏在夜的一角,跌落满怀的轻愁,挥洒落寂。 </string><string name="p5"> 孤星碎,残梦断,素衣寒。镜中颜,月下瘦,隔帘盼,盼来了满腹的心酸。总想躲开关于你的那些记忆,回归最终的平静,让心淡从容。然,转首的瞬间,你遗忘了千年的柔情,为我种下了今生刻骨的伤;千盏的醉意,都醉不尽此生万卷忧愁。卷里卷外,字字刻心,只有一首歌唱着一个不变的故事,淡入心底。</string><string name="p6"> 秋水长天,残阳似血。回首,悲喜无堪一笑,私语里的梦幻,枕边的轻怜,如画,似梦。你的婉约,划过我的眼帘,化成一帘幽梦,洒落在柔进月夜,轻轻惹起千丝万缕的牵挂;昔日种种的情意绵柔,依然缀落眉央,婉婉轻徊,沁沁微香;温柔成满笺的诗句,随夜尽情地释放,然,脸上却留下浅浅泪痕。</string><string name="p7">  醉相忘,何当缠眷;堪怜寂夜,疏影话凄凉。千年缘识,今生情惆;载不动,许多愁,欲语泪先流。在不老的夜里,串起你温润的片言碎语,折叠成唐宋,铺衬今夜的文字。一种情缘只能遥寄梦里,而我,化成梦里的蝴蝶,在瘦长的月光中等待黎明的瞬刻,共舞。</string><string name="p8">  尘缘飞花,人去楼空,梦里花落为谁痛?顾眸流盼,几许痴缠。把自己揉入了轮回里,忆起,在曾相逢的梦里;别离,在泪眼迷朦的花落间;心碎,在指尖的苍白中;淡落,在亘古的残梦中。在夜莺凄凉的叹息里,让片片细腻的柔情,哽咽失语在暗夜的诗句里。任凭一腔绵婉的相思,飘散在风中;任一泓温暖的细雨,吻遍朱唇上的幽凉;任清冷的月光,映刻在眸间,悠悠飘香。</string><string name="p9"> 更夜,白纱凝霜,梦萦千回,寒雾浓烟里,凋零了满帘的落花。满攒的相思,纷飞了忧酸的情话。相聚,别离,恍然一梦。似风,似霜,似梦。滴落在磐石上的一颗泪,衍生了曾经的伤痕。或许,离别只是今生的远行,而三生三世的温柔,却是我今世痴痴眷眷,无悔无怨。</string><string name="p10">  此生,我循着古老的传说,在时光的隧道里,为你飘洒着枯萎的花瓣。在今生短暂的缠绵里,把最美的回忆,串成悠扬婉转的旋律,只为祭奠花盛时,最绚丽的相逢。而我,只不过是被遗忘在---亘古的残梦。</string></resources>

3.编写布局对应控件

package bzu.edu.hou;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;import bzu.edu.hou.adapter.ArticleAdapter;
import bzu.edu.hou.adapter.Messages;
import bzu.edu.hou.view.MyListView;
import android.R.integer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;import android.app.Activity;
import android.content.res.TypedArray;
import android.view.Menu;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;public class MainActivity extends Activity {private MyListView mylistview=null;private List<Messages> list_msg=null;private BaseAdapter adapter=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);init();if(list_msg==null){getData();}adapter=new ArticleAdapter(this,list_msg);mylistview.setOnRershListener(new OnRershListener());//设置监听器mylistview.setAdapter(adapter);}private void getData() {// TODO Auto-generated method stub//获得xml的资源String names[];String article[];TypedArray img;int i;names=getResources().getStringArray(R.array.name);article=getResources().getStringArray(R.array.article);img=getResources().obtainTypedArray(R.array.head_photo);list_msg=new ArrayList<Messages>();for(i=0;i<names.length;i++){Messages message=new Messages();message.setImg(img.getDrawable(i));message.setName(names[i]);message.setArticel(article[i]);message.setRq("人气:"+String.valueOf(new Random().nextInt(1000)));Date date=new Date();SimpleDateFormat simple=new SimpleDateFormat("MM-dd");message.setTime(simple.format(date));list_msg.add(message);}}private void init() {// TODO Auto-generated method stubmylistview=(MyListView)findViewById(R.id.myListView1);
//      mylistview=new MyListView(this);
//      LinearLayout linear=(LinearLayout)MainActivity.this.findViewById(R.id.liner);
//      linear.addView(mylistview);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}Handler handler=new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message arg0) {// TODO Auto-generated method stubif(arg0.what==0){               //结束刷新mylistview.endOnRersh();}return false;}});//刷新接口实现类class OnRershListener implements OnRersh{//实现刷新接口的 方法,,在MyList中会回调该方法。//模拟@Overridepublic void OnRershListener() {// TODO Auto-generated method stubnew Thread(new Run()).start();//启动一个线程}}//线程接口实现类class Run implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubtry {Thread.sleep(2000);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}handler.sendEmptyMessage(0);}}}

4.添加刷新功能

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:gravity="center_vertical"android:orientation="vertical" ><RelativeLayout android:layout_width="match_parent"android:layout_height="75px"android:gravity="center"><TextView android:id="@+id/text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="刷新"android:textSize="17sp"android:layout_centerHorizontal="true"/><TextView android:id="@+id/text1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="loading"android:textSize="14sp"android:layout_below="@id/text"android:gravity="center"android:layout_centerHorizontal="true"/><ImageView android:id="@+id/pull"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/pull_down"android:layout_marginRight="10dip"android:layout_toLeftOf="@id/text1"/><ProgressBar android:id="@+id/progress"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginRight="10dip"android:layout_toLeftOf="@id/text1"/></RelativeLayout>
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;import bzu.edu.hou.R;
import android.content.Context;
import android.opengl.Visibility;import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;public class HeaderView extends LinearLayout {private LinearLayout linear=null;//当前状态private int STATE=DOWN;//下拉状态public static final int DOWN=0;//上拉状态public static final int UP=1;//刷新状态public static final int UPDATA=2;//布局控件private TextView t1,t2=null;private ImageView img=null;private ProgressBar probar=null;//旋转动画对象private RotateAnimation rotate1,rotate2=null;public HeaderView(Context context) {super(context);// TODO Auto-generated constructor stub//初始化刷新头部initView(context);}private void initView(Context context) {// TODO Auto-generated method stub/*1,加载header_view布局2,初始化创建动画对象* */linear=(LinearLayout)LayoutInflater.from(context).inflate(R.layout.header_view, null);//加载布局,第二个对象表示根视图,null表示此布局是根视图。LinearLayout.LayoutParams layoutparams=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0);this.addView(linear, layoutparams);//初始化布局控件t1=(TextView)linear.findViewById(R.id.text);t2=(TextView)linear.findViewById(R.id.text1);img=(ImageView)linear.findViewById(R.id.pull);probar=(ProgressBar)linear.findViewById(R.id.progress);//创建动画对象rotate1 = new RotateAnimation(0, -180, 1, 0.5f, 1, 0.5f);//中点逆时针旋转180度。rotate2 = new RotateAnimation(-180, 0, 1, 0.5f, 1, 0.5f);rotate1.setDuration(200);rotate2.setDuration(200);rotate1.setFillAfter(true);rotate2.setFillAfter(true);}/*** 设置view的高度* */public void setHeaderViewHight(int height){if(height<0){height=0;}//获得HeaderView的布局设置LinearLayout.LayoutParams layp=(LayoutParams)linear.getLayoutParams();layp.height=height;//设置HeaderView的高度linear.setLayoutParams(layp);}public int getSTATE() {return STATE;}/*** 根据父容器MyListView的触摸位移* 设置HeaderView的显示条的状态* */public void setSTATE(int sTATE) {//显示条的3种状态/** 1,下拉状态:*      显示img,隐藏进度条*      判断上一个状态,如果是上拉则开始动画2,回到原始状态(触摸移动发生时,有向上移动)。* 2,刷新状态*      隐藏img,显示进度条* 3,上拉状态*      显示img,隐藏进度条*      判断上一个状态,如果是下拉则开始动画1.* */switch (sTATE) {case DOWN://下拉状态t1.setText("下拉刷新");img.setVisibility(View.VISIBLE);probar.setVisibility(View.GONE);switch (STATE) {//某一时刻  开始动画。case DOWN:break;case UP:img.startAnimation(rotate2);//如果上一个状态是下拉,则返回原始break;}break;case UPDATA:t1.setText("正在刷新");img.clearAnimation();//清除动画img.setVisibility(View.GONE);probar.setVisibility(View.VISIBLE);switch (STATE) {case DOWN:break;case UPDATA:break;case UP:break;}break;case UP:t1.setText("松开刷新");img.setVisibility(View.VISIBLE);probar.setVisibility(View.GONE);switch (STATE) {case DOWN:img.startAnimation(rotate1);//如果上一个状态是旋转上拉动画,break;case UPDATA:break;case UP:break;}break;}STATE = sTATE;//设置当前的状态}/**获得header的高度*/public float getHeaderViewHight() {// TODO Auto-generated method stubreturn linear.getHeight();}public void setTime(){Date date=new Date();SimpleDateFormat simple=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");String datatime=simple.format(date);t2.setText("刷新时间:"+datatime);}
}

android程序写新浪微博相关推荐

  1. java写一个android程序_【Android开发笔记】3.编写第一个Android程序

    前言 上一节我们通过一个Demo熟悉了Eclipse的基本使用.如何在模拟器和手机中运行以及如何打包成APK,但没具体编写代码,相信很多同学已经按耐不住了吧,这一节我们会动手编写代码来熟悉Androi ...

  2. android真机怎么使用虚拟串口,怎么用小米手机调试我写的android程序

    怎么用小米手机调试我写的android程序以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 怎么用小米手机调试我写的and ...

  3. python可以写安卓应用吗_python可以编写android程序吗?

    python可以编写android程序吗?答案是肯定的.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid.CLE以及Wrapandroid ...

  4. 据说年薪30万的Android程序员必须知道的帖子

    Android开源项目第一篇--个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Progres ...

  5. 给Android程序员的六个建议

    给Android程序员的六个建议 分类: 安卓相关2015-07-14 23:58 177人阅读 评论(0) 收藏 举报 android程序员 如果你一年前写的代码 , 在现在看来你还感觉写的很不错 ...

  6. 编写第一个Android程序

    Android Studio下载地址:https://dl.google.com/dl/android/studio/install/3.0.0.18/android-studio-ide-171.4 ...

  7. Android程序如何实现从网络中获取一张图片

    在学习黎活明的Android视频的时候,有一讲是说怎么从网络中获取图片.这里,我就做一个笔记和总结吧. 首先,我们要知道图片这种文件,不能以我们印象中那些基本数据类型来定义或是以这些类型从网络中获取图 ...

  8. Android程序员的进阶之路

    本文主要论述的是Android程序员的进阶之路,博主本人就是一名android开发攻城狮,所以这里讲述的大多数是android开发攻城狮的技术进阶之路,如有问题请多指正. 大家都知道程序员之中有有菜鸟 ...

  9. 创建android程序时 默认使用布局是,《Android移动应用基础教程》中国铁道出版社课后习题(附答案)...

    <Android移动应用基础教程>中国铁道出版社课后习题(附答案) 第2章Android UI开发 一.填空题 1.Android中的布局分为6种,分别是RelativeLayout.Li ...

最新文章

  1. 获取android屏幕大小
  2. RNN(Recurrent Neural Network)的几个难点
  3. 【Python】我的Pandas学习经历及动手实践
  4. 深入react技术栈(5):React生命周期
  5. linux java amr转mp3_本工具用于将微信语音 amr 格式转换为 mp3 格式以便在 html5 的 audio 标签中进行播放...
  6. Mybatis框架插件PageHelper的使用
  7. ADOBE AIR 技术
  8. Oracle全局临时表和私有临时表
  9. U盘图标显示成文件夹图标
  10. 电脑知识:电脑被黑客攻击,那么如何电脑判断沦为“肉鸡”?
  11. 安卓10.1寸大屏车载导航
  12. Windows mobile屏幕旋转解决方案
  13. 从资源爬取到个人微信公众号开发:使用 Python 打造公众号电影搜索器
  14. 快速学会如何在linux上用户环境变量和系统环境变量
  15. js将对象会集合转换为json字符串。Jackson
  16. 华硕服务器系统安装win7系统教程,华硕光盘重装系统win7图文教程
  17. ddr2是几代内存_DDR1 DDR2 DDR3内存条有什么区别?怎么区分?
  18. 单片机c语言编程规则,单片机C语言编程规则
  19. 智慧饭堂餐饮管理系统
  20. 计算机科技学术讲座心得体会,学术报告心得体会

热门文章

  1. structs中的result类型
  2. 学了python之后 画画都是这样操作的
  3. java中的经典问题解答
  4. 菜鸡的MVP架构漫谈
  5. 推荐我的新书《深入理解Nginx:模块开发与架构解析》
  6. 在Hibernate中Query的uniqueResult查询。
  7. 裸辞的你,现在还好吗?
  8. unity 简单实现tilemap的保存和读取(以便用于关卡编辑器)
  9. textarea标签
  10. 77种互联网盈利创新模式(11)