Android开发学习之微信公众号界面

来源:互联网 发布:worth it下载 编辑:程序博客网 时间:2024/04/30 00:01

            接着上一篇博客中的卡片式设计,我们继续从微信中寻找一些线索,我们首先来看这样一个界面,这是微信中默认的一个公众号,主要是发布腾讯新闻上的最新动态,我们可以看出,它采用了类似于我们在上一篇文章中采用的卡片式布局。那么,今天就让我们一起来做这样一个界面吧!


           第一步,当然是创建layout_item的布局,即列表项目的布局,这里直接给出布局代码,代码并不复杂,只是属性设置较为繁琐。

[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <?xml version=“1.0” encoding=“utf-8”?>  
  2. <RelativeLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
  3.     android:layout_width=“match_parent”  
  4.     android:layout_height=“match_parent”  
  5.     android:background=“@drawable/radius_bg”  
  6.     android:paddingBottom=“10dp”  
  7.     android:orientation=“vertical”>  
  8.     <ImageView  
  9.         android:id=“@+id/News_Pic”  
  10.         android:layout_width=“wrap_content”  
  11.         android:layout_height=“100dp”  
  12.         android:layout_alignParentLeft=“true”  
  13.         android:layout_alignParentRight=“true”  
  14.         android:layout_alignParentTop=“true”  
  15.         android:layout_marginLeft=“10dp”  
  16.         android:layout_marginRight=“10dp”  
  17.         android:layout_marginTop=“10dp”  
  18.         android:contentDescription=“@string/Description”  
  19.         android:scaleType=“center” />  
  20.     <TextView  
  21.         android:id=“@+id/News_Title”  
  22.         android:layout_width=“wrap_content”  
  23.         android:layout_height=“30dp”  
  24.         android:layout_alignLeft=“@+id/News_Pic”  
  25.         android:layout_alignRight=“@+id/News_Pic”  
  26.         android:layout_below=“@+id/News_Pic”  
  27.         android:background=“#707070”  
  28.         android:gravity=“left|center”  
  29.         android:textColor=“#ffffff”  
  30.         android:contentDescription=“@string/Description”  
  31.         android:textIsSelectable=“true” />  
  32.   
  33.    <TextView  
  34.        android:id=“@+id/News_Title1”  
  35.        android:layout_width=“200dp”  
  36.        android:layout_height=“45dp”  
  37.        android:layout_alignLeft=“@+id/News_Title”  
  38.        android:layout_alignRight=“@+id/News_Title2”  
  39.        android:layout_below=“@+id/News_Title”  
  40.        android:layout_marginTop=“10dp”  
  41.        android:gravity=“center”  
  42.        android:textIsSelectable=“true” />  
  43.   
  44.     <ImageView  
  45.         android:id=“@+id/News_Pic1”  
  46.         android:layout_width=“45dp”  
  47.         android:layout_height=“45dp”  
  48.         android:layout_alignRight=“@+id/News_Title”  
  49.         android:layout_alignTop=“@+id/News_Title1”  
  50.         android:contentDescription=“@string/Description”  
  51.         android:scaleType=“center” />  
  52.   
  53.     <TextView  
  54.         android:id=“@+id/News_Title2”  
  55.         android:layout_width=“200dp”  
  56.         android:layout_height=“45dp”  
  57.         android:layout_alignParentLeft=“true”  
  58.         android:layout_below=“@+id/News_Title1”  
  59.         android:layout_margin=“10dp”  
  60.         android:layout_toLeftOf=“@+id/News_Pic1”  
  61.         android:gravity=“center”  
  62.         android:textIsSelectable=“true” />  
  63.   
  64.     <ImageView  
  65.         android:id=“@+id/News_Pic2”  
  66.         android:layout_width=“45dp”  
  67.         android:layout_height=“45dp”  
  68.         android:layout_alignTop=“@+id/News_Title2”  
  69.         android:layout_toRightOf=“@+id/News_Title2”  
  70.         android:contentDescription=“@string/Description”  
  71.         android:scaleType=“center” />  
  72.   
  73.     <TextView  
  74.         android:id=“@+id/News_Title3”  
  75.         android:layout_width=“200dp”  
  76.         android:layout_height=“45dp”  
  77.         android:layout_alignLeft=“@+id/News_Title1”  
  78.         android:layout_alignRight=“@+id/News_Title2”  
  79.         android:layout_below=“@+id/News_Title2”  
  80.         android:gravity=“center”  
  81.         android:textIsSelectable=“true” />  
  82.   
  83.     <ImageView  
  84.         android:id=“@+id/News_Pic3”  
  85.         android:layout_width=“45dp”  
  86.         android:layout_height=“45dp”  
  87.         android:layout_alignRight=“@+id/News_Pic2”  
  88.         android:layout_alignTop=“@+id/News_Title3”  
  89.         android:layout_toRightOf=“@+id/News_Title2”  
  90.         android:contentDescription=“@string/Description”  
  91.         android:scaleType=“center” />  
  92.   
  93. </RelativeLayout>  
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:background="@drawable/radius_bg"    android:paddingBottom="10dp"    android:orientation="vertical">    <ImageView        android:id="@+id/News_Pic"        android:layout_width="wrap_content"        android:layout_height="100dp"        android:layout_alignParentLeft="true"        android:layout_alignParentRight="true"        android:layout_alignParentTop="true"        android:layout_marginLeft="10dp"        android:layout_marginRight="10dp"        android:layout_marginTop="10dp"        android:contentDescription="@string/Description"        android:scaleType="center" />    <TextView        android:id="@+id/News_Title"        android:layout_width="wrap_content"        android:layout_height="30dp"        android:layout_alignLeft="@+id/News_Pic"        android:layout_alignRight="@+id/News_Pic"        android:layout_below="@+id/News_Pic"        android:background="#707070"        android:gravity="left|center"        android:textColor="#ffffff"        android:contentDescription="@string/Description"        android:textIsSelectable="true" />   <TextView       android:id="@+id/News_Title1"       android:layout_width="200dp"       android:layout_height="45dp"       android:layout_alignLeft="@+id/News_Title"       android:layout_alignRight="@+id/News_Title2"       android:layout_below="@+id/News_Title"       android:layout_marginTop="10dp"       android:gravity="center"       android:textIsSelectable="true" />    <ImageView        android:id="@+id/News_Pic1"        android:layout_width="45dp"        android:layout_height="45dp"        android:layout_alignRight="@+id/News_Title"        android:layout_alignTop="@+id/News_Title1"        android:contentDescription="@string/Description"        android:scaleType="center" />    <TextView        android:id="@+id/News_Title2"        android:layout_width="200dp"        android:layout_height="45dp"        android:layout_alignParentLeft="true"        android:layout_below="@+id/News_Title1"        android:layout_margin="10dp"        android:layout_toLeftOf="@+id/News_Pic1"        android:gravity="center"        android:textIsSelectable="true" />    <ImageView        android:id="@+id/News_Pic2"        android:layout_width="45dp"        android:layout_height="45dp"        android:layout_alignTop="@+id/News_Title2"        android:layout_toRightOf="@+id/News_Title2"        android:contentDescription="@string/Description"        android:scaleType="center" />    <TextView        android:id="@+id/News_Title3"        android:layout_width="200dp"        android:layout_height="45dp"        android:layout_alignLeft="@+id/News_Title1"        android:layout_alignRight="@+id/News_Title2"        android:layout_below="@+id/News_Title2"        android:gravity="center"        android:textIsSelectable="true" />    <ImageView        android:id="@+id/News_Pic3"        android:layout_width="45dp"        android:layout_height="45dp"        android:layout_alignRight="@+id/News_Pic2"        android:layout_alignTop="@+id/News_Title3"        android:layout_toRightOf="@+id/News_Title2"        android:contentDescription="@string/Description"        android:scaleType="center" /></RelativeLayout>

               第二步,我们需要为卡片编写一个圆角的形状radius_bg。代码和上一篇文章是一样的

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <?xml version=“1.0” encoding=“utf-8”?>  
  2. <shape xmlns:android=”http://schemas.android.com/apk/res/android” >  
  3.     <solid android:color=”#ffffff”/>  
  4.     <corners android:radius=”10dp”/>  
  5. </shape>  
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" >    <solid android:color="#ffffff"/>    <corners android:radius="10dp"/></shape>
          第三步,卡片类,这里卡片类共有两个,BaseCard为基类,Card为继承自BaseCard的一个类:

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * 仿微信公众平台消息界面 
  3.  * @作者:秦元培 
  4.  *  
  5.  */  
  6. package com.Android.WeChatCard;  
  7.   
  8. public class BaseCard   
  9. {  
  10.    private int mDrawable;  
  11.   
  12.    private String mDescription;  
  13.   
  14.    public BaseCard(int Drawable,String Description)  
  15.    {  
  16.        this.mDrawable=Drawable;  
  17.        this.mDescription=Description;  
  18.    }  
  19.      
  20.    public int getDrawable()   
  21.    {  
  22.     return mDrawable;  
  23.    }  
  24.      
  25.    public void setDrawable(int mDrawable)   
  26.    {  
  27.     this.mDrawable = mDrawable;  
  28.    }  
  29.      
  30.    public String getDescription()   
  31.    {  
  32.     return mDescription;  
  33.    }  
  34.      
  35.    public void setDescription(String mDescription)   
  36.    {  
  37.     this.mDescription = mDescription;  
  38.    }  
  39.      
  40. }  
/* * 仿微信公众平台消息界面 * @作者:秦元培 *  */package com.Android.WeChatCard;public class BaseCard {   private int mDrawable;   private String mDescription;   public BaseCard(int Drawable,String Description)   {       this.mDrawable=Drawable;       this.mDescription=Description;   }   public int getDrawable()    {    return mDrawable;   }   public void setDrawable(int mDrawable)    {    this.mDrawable = mDrawable;   }   public String getDescription()    {    return mDescription;   }   public void setDescription(String mDescription)    {    this.mDescription = mDescription;   }}

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. package com.Android.WeChatCard;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. public class Card extends BaseCard {  
  7.   
  8.   
  9.     private List<BaseCard> mSubCards;  
  10.   
  11.     public Card(int Drawable, String Description)   
  12.     {  
  13.         super(Drawable, Description);  
  14.         mSubCards=new ArrayList<BaseCard>();  
  15.     }  
  16.       
  17.     public void AppendCard(BaseCard mCard)  
  18.     {  
  19.         mSubCards.add(mCard);  
  20.     }  
  21.       
  22.     public List<BaseCard> getSubCards()   
  23.     {  
  24.         return mSubCards;  
  25.     }  
  26.   
  27. }  
package com.Android.WeChatCard;import java.util.ArrayList;import java.util.List;public class Card extends BaseCard {    private List<BaseCard> mSubCards;    public Card(int Drawable, String Description)     {        super(Drawable, Description);        mSubCards=new ArrayList<BaseCard>();    }    public void AppendCard(BaseCard mCard)    {        mSubCards.add(mCard);    }    public List<BaseCard> getSubCards()     {        return mSubCards;    }}

           第四步,我们来编写自定义适配器类CardAdapter:

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. package com.Android.WeChatCard;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.content.Context;  
  6. import android.view.LayoutInflater;  
  7. import android.view.View;  
  8. import android.view.ViewGroup;  
  9. import android.widget.BaseAdapter;  
  10. import android.widget.ImageView;  
  11. import android.widget.TextView;  
  12.   
  13. public class CardAdapter extends BaseAdapter {  
  14.   
  15.     private Context mContext;  
  16.     private List<Card> mCards;  
  17.     public CardAdapter(Context mContext,List<Card> mCards)  
  18.     {  
  19.         this.mContext=mContext;  
  20.         this.mCards=mCards;  
  21.     }  
  22.     @Override  
  23.     public int getCount()   
  24.     {  
  25.         return mCards.size();  
  26.     }  
  27.   
  28.     @Override  
  29.     public Object getItem(int Index)   
  30.     {  
  31.         return mCards.get(Index);  
  32.     }  
  33.   
  34.     @Override  
  35.     public long getItemId(int Index)   
  36.     {  
  37.         return Index;  
  38.     }  
  39.   
  40.     @Override  
  41.     public View getView(int Index, View mView, ViewGroup mParent)   
  42.     {  
  43.              mView=LayoutInflater.from(mContext).inflate(R.layout.layout_item, null);  
  44.              //头条消息  
  45.              ImageView News_Pic=(ImageView)mView.findViewById(R.id.News_Pic);  
  46.              News_Pic.setImageResource(mCards.get(Index).getDrawable());  
  47.              TextView News_Title=(TextView)mView.findViewById(R.id.News_Title);  
  48.              News_Title.setText(mCards.get(Index).getDescription());  
  49.              //消息一  
  50.              ImageView News_Pic1=(ImageView)mView.findViewById(R.id.News_Pic1);  
  51.              News_Pic1.setImageResource(mCards.get(Index).getSubCards().get(0).getDrawable());  
  52.              TextView News_Title1=(TextView)mView.findViewById(R.id.News_Title1);  
  53.              News_Title1.setText(mCards.get(Index).getSubCards().get(0).getDescription());  
  54.              //消息二  
  55.              ImageView News_Pic2=(ImageView)mView.findViewById(R.id.News_Pic2);  
  56.              News_Pic2.setImageResource(mCards.get(Index).getSubCards().get(1).getDrawable());  
  57.              TextView News_Title2=(TextView)mView.findViewById(R.id.News_Title2);  
  58.              News_Title2.setText(mCards.get(Index).getSubCards().get(1).getDescription());  
  59.              //消息三  
  60.             ImageView News_Pic3=(ImageView)mView.findViewById(R.id.News_Pic3);  
  61.             News_Pic3.setImageResource(mCards.get(Index).getSubCards().get(2).getDrawable());  
  62.             TextView News_Title3=(TextView)mView.findViewById(R.id.News_Title3);  
  63.             News_Title3.setText(mCards.get(Index).getSubCards().get(2).getDescription());  
  64.         return mView;  
  65.     }  
  66. }  
package com.Android.WeChatCard;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class CardAdapter extends BaseAdapter {    private Context mContext;    private List<Card> mCards;    public CardAdapter(Context mContext,List<Card> mCards)    {        this.mContext=mContext;        this.mCards=mCards;    }    @Override    public int getCount()     {        return mCards.size();    }    @Override    public Object getItem(int Index)     {        return mCards.get(Index);    }    @Override    public long getItemId(int Index)     {        return Index;    }    @Override    public View getView(int Index, View mView, ViewGroup mParent)     {             mView=LayoutInflater.from(mContext).inflate(R.layout.layout_item, null);             //头条消息             ImageView News_Pic=(ImageView)mView.findViewById(R.id.News_Pic);             News_Pic.setImageResource(mCards.get(Index).getDrawable());             TextView News_Title=(TextView)mView.findViewById(R.id.News_Title);             News_Title.setText(mCards.get(Index).getDescription());             //消息一             ImageView News_Pic1=(ImageView)mView.findViewById(R.id.News_Pic1);             News_Pic1.setImageResource(mCards.get(Index).getSubCards().get(0).getDrawable());             TextView News_Title1=(TextView)mView.findViewById(R.id.News_Title1);             News_Title1.setText(mCards.get(Index).getSubCards().get(0).getDescription());             //消息二             ImageView News_Pic2=(ImageView)mView.findViewById(R.id.News_Pic2);             News_Pic2.setImageResource(mCards.get(Index).getSubCards().get(1).getDrawable());             TextView News_Title2=(TextView)mView.findViewById(R.id.News_Title2);             News_Title2.setText(mCards.get(Index).getSubCards().get(1).getDescription());             //消息三            ImageView News_Pic3=(ImageView)mView.findViewById(R.id.News_Pic3);            News_Pic3.setImageResource(mCards.get(Index).getSubCards().get(2).getDrawable());            TextView News_Title3=(TextView)mView.findViewById(R.id.News_Title3);            News_Title3.setText(mCards.get(Index).getSubCards().get(2).getDescription());        return mView;    }}

         由于每个头条消息下有三个消息,因此我们需要在构造Card的时候,使用AppendCard()方法添加三个BaseCard供这里绑定使用,这一点在使用的时候需要注意。

         第五步,主界面的布局和相关逻辑:

[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”  
  2.     xmlns:tools=“http://schemas.android.com/tools”  
  3.     android:layout_width=“match_parent”  
  4.     android:layout_height=“match_parent”  
  5.     android:orientation=“vertical”  
  6.     tools:context=“.MainActivity” >  
  7.     <TextView  
  8.         android:layout_width=“match_parent”  
  9.         android:layout_height=“40dp”  
  10.         android:background=“@drawable/tab_bg”  
  11.         android:gravity=“center”  
  12.         android:textColor=“#ffffff”  
  13.         android:textSize=“18sp”  
  14.         android:text=“@string/Title” />  
  15.     <ListView  
  16.         android:id=“@+id/ListView”  
  17.         android:layout_width=“match_parent”  
  18.         android:layout_height=“wrap_content”  
  19.         android:divider=“@null”  
  20.         android:dividerHeight=“30dp”  
  21.         android:paddingLeft=“20dp”  
  22.         android:paddingRight=“20dp”  
  23.         android:scrollbarStyle=“outsideOverlay” >  
  24.     </ListView>  
  25. </LinearLayout>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context=".MainActivity" >    <TextView        android:layout_width="match_parent"        android:layout_height="40dp"        android:background="@drawable/tab_bg"        android:gravity="center"        android:textColor="#ffffff"        android:textSize="18sp"        android:text="@string/Title" />    <ListView        android:id="@+id/ListView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:divider="@null"        android:dividerHeight="30dp"        android:paddingLeft="20dp"        android:paddingRight="20dp"        android:scrollbarStyle="outsideOverlay" >    </ListView></LinearLayout>

[java] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * 仿微信公众号消息界面 
  3.  * 作者:秦元培 
  4.  * 时间:2013年12月30日 
  5.  * 这个程序的原理是重写适配器,然后绑定列表。我觉得微信的实现原理应该使用的ScrollView吧 
  6.  * 这个程序目前的缺点有: 
  7.  * 1、Card和BaseCard两个类还需要完善 
  8.  * 2、滚动条不是在屏幕边缘,而是在卡片边缘,也就是说这个方法本身有问题.[解决方法:scrollbarStyle=”outsideOverlay] 
  9.  * 3、两个卡片间的间距问题无法解决,尝试着用了divider和dividerHeight属性,发现有一定的色差[解决方法:android:divider=”@null”] 
  10.  * 4、如果要实现微信的那个通知,需要增加一个布局、一个类型判断 
  11.  * 5、当图片较多时解决内存消耗的问题 
  12.  */  
  13. package com.Android.WeChatCard;  
  14.   
  15. import java.util.ArrayList;  
  16. import java.util.List;  
  17.   
  18. import android.os.Bundle;  
  19. import android.app.Activity;  
  20. import android.view.Menu;  
  21. import android.view.Window;  
  22. import android.widget.ListView;  
  23.   
  24. public class MainActivity extends Activity {  
  25.   
  26.     private ListView mListView;  
  27.     private CardAdapter mAdapter;  
  28.     @Override  
  29.     protected void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  32.         setContentView(R.layout.layout_main);  
  33.         mListView=(ListView)findViewById(R.id.ListView);  
  34.         mAdapter=new CardAdapter(this,getItems());  
  35.         mListView.setAdapter(mAdapter);   
  36.     }  
  37.   
  38.     private List<Card> getItems()   
  39.     {  
  40.         List<Card> mCards=new ArrayList<Card>();  
  41.         //第一个卡片  
  42.         Card mCard=new Card(R.drawable.pic_0,“这是第一个头条信息”);  
  43.         BaseCard mBaseCard1=new BaseCard(R.drawable.pic_0,“这是第一个文本消息”);  
  44.         BaseCard mBaseCard2=new BaseCard(R.drawable.pic_0,“这是第一个文本消息”);  
  45.         BaseCard mBaseCard3=new BaseCard(R.drawable.pic_0,“这是第一个文本消息”);  
  46.         mCard.AppendCard(mBaseCard1);  
  47.         mCard.AppendCard(mBaseCard2);  
  48.         mCard.AppendCard(mBaseCard3);  
  49.         //添加卡片  
  50.         mCards.add(mCard);  
  51.   
  52.         //第二个卡片  
  53.         mCard=new Card(R.drawable.pic_1,“这是第二个头条信息”);  
  54.         mBaseCard1=new BaseCard(R.drawable.pic_1,“这是第一个文本消息”);  
  55.         mBaseCard2=new BaseCard(R.drawable.pic_1,“这是第一个文本消息”);  
  56.         mBaseCard3=new BaseCard(R.drawable.pic_1,“这是第一个文本消息”);  
  57.         mCard.AppendCard(mBaseCard1);  
  58.         mCard.AppendCard(mBaseCard2);  
  59.         mCard.AppendCard(mBaseCard3);  
  60.         //添加卡片  
  61.         mCards.add(mCard);  
  62.   
  63.         //第三个卡片  
  64.         mCard=new Card(R.drawable.pic_2,“这是第三个头条信息”);  
  65.         mBaseCard1=new BaseCard(R.drawable.pic_2,“这是第一个文本消息”);  
  66.         mBaseCard2=new BaseCard(R.drawable.pic_2,“这是第一个文本消息”);  
  67.         mBaseCard3=new BaseCard(R.drawable.pic_2,“这是第一个文本消息”);  
  68.         mCard.AppendCard(mBaseCard1);  
  69.         mCard.AppendCard(mBaseCard2);  
  70.         mCard.AppendCard(mBaseCard3);  
  71.         //添加卡片  
  72.         mCards.add(mCard);  
  73.           
  74.           
  75.         //第四个卡片  
  76.         mCard=new Card(R.drawable.pic_3,“这是第四个头条信息”);  
  77.         mBaseCard1=new BaseCard(R.drawable.pic_3,“这是第一个文本消息”);  
  78.         mBaseCard2=new BaseCard(R.drawable.pic_3,“这是第一个文本消息”);  
  79.         mBaseCard3=new BaseCard(R.drawable.pic_3,“这是第一个文本消息”);  
  80.         mCard.AppendCard(mBaseCard1);  
  81.         mCard.AppendCard(mBaseCard2);  
  82.         mCard.AppendCard(mBaseCard3);  
  83.         //添加卡片  
  84.         mCards.add(mCard);  
  85.           
  86.         return mCards;  
  87.     }  
  88.   
  89.     @Override  
  90.     public boolean onCreateOptionsMenu(Menu menu) {  
  91.         // Inflate the menu; this adds items to the action bar if it is present.  
  92.         getMenuInflater().inflate(R.menu.main, menu);  
  93.         return true;  
  94.     }  
  95.   
  96. }  
/* * 仿微信公众号消息界面 * 作者:秦元培 * 时间:2013年12月30日 * 这个程序的原理是重写适配器,然后绑定列表。我觉得微信的实现原理应该使用的ScrollView吧 * 这个程序目前的缺点有: * 1、Card和BaseCard两个类还需要完善 * 2、滚动条不是在屏幕边缘,而是在卡片边缘,也就是说这个方法本身有问题.[解决方法:scrollbarStyle="outsideOverlay] * 3、两个卡片间的间距问题无法解决,尝试着用了divider和dividerHeight属性,发现有一定的色差[解决方法:android:divider="@null"] * 4、如果要实现微信的那个通知,需要增加一个布局、一个类型判断 * 5、当图片较多时解决内存消耗的问题 */package com.Android.WeChatCard;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.Window;import android.widget.ListView;public class MainActivity extends Activity {    private ListView mListView;    private CardAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        this.requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.layout_main);        mListView=(ListView)findViewById(R.id.ListView);        mAdapter=new CardAdapter(this,getItems());        mListView.setAdapter(mAdapter);     }    private List<Card> getItems()     {        List<Card> mCards=new ArrayList<Card>();        //第一个卡片        Card mCard=new Card(R.drawable.pic_0,"这是第一个头条信息");        BaseCard mBaseCard1=new BaseCard(R.drawable.pic_0,"这是第一个文本消息");        BaseCard mBaseCard2=new BaseCard(R.drawable.pic_0,"这是第一个文本消息");        BaseCard mBaseCard3=new BaseCard(R.drawable.pic_0,"这是第一个文本消息");        mCard.AppendCard(mBaseCard1);        mCard.AppendCard(mBaseCard2);        mCard.AppendCard(mBaseCard3);        //添加卡片        mCards.add(mCard);        //第二个卡片        mCard=new Card(R.drawable.pic_1,"这是第二个头条信息");        mBaseCard1=new BaseCard(R.drawable.pic_1,"这是第一个文本消息");        mBaseCard2=new BaseCard(R.drawable.pic_1,"这是第一个文本消息");        mBaseCard3=new BaseCard(R.drawable.pic_1,"这是第一个文本消息");        mCard.AppendCard(mBaseCard1);        mCard.AppendCard(mBaseCard2);        mCard.AppendCard(mBaseCard3);        //添加卡片        mCards.add(mCard);        //第三个卡片        mCard=new Card(R.drawable.pic_2,"这是第三个头条信息");        mBaseCard1=new BaseCard(R.drawable.pic_2,"这是第一个文本消息");        mBaseCard2=new BaseCard(R.drawable.pic_2,"这是第一个文本消息");        mBaseCard3=new BaseCard(R.drawable.pic_2,"这是第一个文本消息");        mCard.AppendCard(mBaseCard1);        mCard.AppendCard(mBaseCard2);        mCard.AppendCard(mBaseCard3);        //添加卡片        mCards.add(mCard);        //第四个卡片        mCard=new Card(R.drawable.pic_3,"这是第四个头条信息");        mBaseCard1=new BaseCard(R.drawable.pic_3,"这是第一个文本消息");        mBaseCard2=new BaseCard(R.drawable.pic_3,"这是第一个文本消息");        mBaseCard3=new BaseCard(R.drawable.pic_3,"这是第一个文本消息");        mCard.AppendCard(mBaseCard1);        mCard.AppendCard(mBaseCard2);        mCard.AppendCard(mBaseCard3);        //添加卡片        mCards.add(mCard);        return mCards;    }    @Override    public 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;    }}

               最终运行效果如图所示:


       至于微信中的消息发送时间的实现,大家可以参考这篇文章:

       http://blog.csdn.net/qinyuanpei/article/details/17727767

0 0
原创粉丝点击