安卓今日头条的框架的搭建
2017-09-15 19:04
459 查看
主要的思路:
第一、在主的activity中写DrawerLayout加Viewpager(vp)实现侧拉的功能
写viewpager(vp1)加载四个Fragment第二,在第一个Fragment中加载TabLayout与Viewpager实现导航栏的滑动
写一个viewpager与一个下圆点的联动,在写个XListView实现解析后新闻条目的上拉加载,下拉刷新,gson的架包
在适配器中判断子条目的不同布局,ImageLoader加载图片 (需要使用universal_Imager_Loader的架包)
//activty_main的布局
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dl" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="690dp" android:id="@+id/vp" android:layout_weight="2" /> <RadioGroup android:layout_width="match_parent" android:layout_height="40dp" android:id="@+id/rg" android:layout_weight="8" android:orientation="horizontal"> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rb1" android:text="新闻" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:checked="true" android:layout_weight="1" android:background="@drawable/se"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rb2" android:text="关注" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" android:background="@drawable/se"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rb3" android:text="动态" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" android:background="@drawable/se"/> <RadioButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/rb4" android:text="设置" android:layout_margin="15dp" android:textSize="20sp" android:button="@null" android:layout_gravity="center" android:gravity="center" android:background="@drawable/se"/> </RadioGroup> </LinearLayout> <ListView android:layout_width="200dp" android:layout_height="match_parent" android:id="@+id/lv" android:background="#fff" android:entries="@array/news" android:layout_gravity="left"> </ListView> </android.support.v4.widget.DrawerLayout>
//MainActivit
//在drawale包下创建selector.xml的文件控件按钮被选中的颜色<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@color/colorPrimary"/> </selector>
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.RadioGroup; import com.example.shenxuesong.jinritoutiao.Adapter.MyAdapter; import com.example.shenxuesong.jinritoutiao.Fragment.Fragment01; import com.example.shenxuesong.jinritoutiao.Fragment.Fragment02; import com.example.shenxuesong.jinritoutiao.Fragment.Fragment03; import com.example.shenxuesong.jinritoutiao.Fragment.Fragment04; import java.util.ArrayList; import java.util.List; public class MainActivity extends FragmentActivity implements RadioGroup.OnCheckedChangeListener{ private ViewPager vp; private RadioGroup rg; private List<Fragment>list=new ArrayList<Fragment>(); private ListView lv; private DrawerLayout dl; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //查找组件 vp=(ViewPager)findViewById(R.id.vp); rg=(RadioGroup)findViewById(R.id.rg); lv=(ListView)findViewById(R.id.lv) ; dl=(DrawerLayout)findViewById(R.id.dl); //造数据 list.add(new Fragment01()); list.add(new Fragment02()); list.add(new Fragment03()); list.add(new Fragment04()); //设置适配器 MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager(),list); vp.setAdapter(myAdapter); //实现侧拉的功能 init(); //设置viewpager的监听事件,使vp与rg有联动效果 vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position){ case 0: rg.check(R.id.rb1); break; case 1: rg.check(R.id.rb2); break; case 2: rg.check(R.id.rb3); break; case 3: rg.check(R.id.rb4); break; } } @Override public void onPageScrollStateChanged(int state) { } }); rg.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i) { case R.id.rb1: vp.setCurrentItem(0); break; case R.id.rb2: vp.setCurrentItem(1); break; case R.id.rb3: vp.setCurrentItem(2); break; case R.id.rb4: vp.setCurrentItem(3); break; } } private void init() { //打开侧拉 dl.openDrawer(lv); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { } }); } }//给viewpager写适配器
public class MyAdapter extends FragmentPagerAdapter { private List<Fragment> list; public MyAdapter(FragmentManager fm, List<Fragment> list) { super(fm); this.list = list; } @Override public int getCount() { return list.size(); } @Override public Fragment getItem(int position) { return list.get(position); } }
//写四个Fragment的类和布局
主要的操作都在Fragment01中下面就着重对其进行展示(TabLayout与ViewPagerj结合使用,实现导航菜单的滑动功能)
fragment01的布局 TabLayout需要导包design
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/dl"> <!--实现导航栏的滑动功能--> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/table" app:tabGravity="center" app:tabIndicatorColor="#f00" app:tabMode="scrollable" android:background="#22f" app:tabSelectedTextColor="#ff0000" app:tabTextColor="#fff" > </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/pager" /> </LinearLayout>
//Fragment01实现航栏的滑动功能
import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.example.shenxuesong.jinritoutiao.R; import java.util.ArrayList; import java.util.List; public class Fragment01 extends Fragment { private TabLayout tab; private ViewPager vp1; private List<String> list=new ArrayList<String>();//收集标题 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment01, container,false); //查找控件 tab = (TabLayout) view.findViewById(R.id.table); vp1 = (ViewPager) view.findViewById(R.id.pager); //tab的标题 list.add("头条"); list.add("社会"); list.add("国内"); list.add("国际"); list.add("娱乐"); list.add("体育"); list.add("军事"); list.add("科技"); list.add("财经"); list.add("时尚"); //tablayout和viewpager关联 tab.setupWithViewPager(vp1); //设置viewpager适配器 vp1.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) { @Override public CharSequence getPageTitle(int position) { return list.get(position); } @Override public Fragment getItem(int position) { //实例化一个Fragment加载Xlistview NewFragment newfragment = new NewFragment(); Bundle bundle = new Bundle(); if(list.get(position).equals("头条")){ bundle.putString("name","top"); } else if(list.get(position).equals("社会")){ bundle.putString("name","shehui"); } else if(list.get(position).equals("国内")){ bundle.putString("name","guonei"); } else if(list.get(position).equals("国际")){ bundle.putString("name","guoji"); } else if(list.get(position).equals("娱乐")){ bundle.putString("name","yule"); } else if(list.get(position).equals("财经")){ bundle.putString("name","caijing"); } else if(list.get(position).equals("军事")){ bundle.putString("name","junshi"); } else if(list.get(position).equals("科技")){ bundle.putString("name","keji"); } else if(list.get(position).equals("体育")){ bundle.putString("name","tiyu"); } else if(list.get(position).equals("时尚")){ bundle.putString("name","shishang"); } //activity与fragment 1.getset,2.接口回调,3.setArguments ,getAraguments newfragment.setArguments(bundle); //相当于加载了一个Fragment return newfragment; } @Override public int getCount() { return list.size(); } }); return view; } }
//NewFragment实现了所有新闻的展示,它是替换了Fragment01,
在此类中会运用到网络请解析json数据、XListview、ImageLoader等知识点
//XListView的依赖包(配置下面的两句依赖就可以实现XListView )maven{url'https://jitpack.io'}
compile 'com.github.ForgiveAll:Xlistview:v1.0'
newFragment的布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!--蓝色部分实现是自动轮播的图片、图片上的标题、小圆点--> <android.support.v4.view.ViewPager android:layout_width="wrap_content" android:layout_height="200dp" android:id="@+id/vp" android:layout_marginTop="10dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv" android:layout_marginTop="-40dp" android:layout_marginLeft="20dp" android:textColor="#22f" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:id="@+id/ll" android:orientation="horizontal" android:layout_marginTop="-35dp" > </LinearLayout> <!--实现是展示的是上拉加载,下拉刷新--> <me.maxwin.view.XListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/list" > </me.maxwin.view.XListView> </LinearLayout>
//圆点的视图布局(item.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:layout_width="8dp" android:layout_height="8dp" android:layout_margin="10dp" android:id="@+id/view" android:background="@drawable/shape1" /> </LinearLayout>//在drawable的视图下面创建shape.xml、shape1.xml控制圆点的颜色
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#80000000"/> <corners android:radius="8dp"/> </shape>
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#f00"/> <corners android:radius="8dp"/> </shape>
import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.example.shenxuesong.jinritoutiao.Adapter.Myadpader1; import com.example.shenxuesong.jinritoutiao.JavaBean; import com.example.shenxuesong.jinritoutiao.R; import com.example.shenxuesong.jinritoutiao.User; import com.google.gson.Gson; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageSize; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; import me.maxwin.view.XListView; public class NewFragment extends Fragment implements XListView.IXListViewListener{ private List<User.ResultBean.DataBean> data; private Myadpader1 myadpader; private ViewPager vp; private TextView tv; private LinearLayout ll; private XListView list; private static final String surl="https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=6&page=1"; private List<JavaBean.NewslistBean> newslist; private List<View> dolist=new ArrayList<View>(); private List<String> str=new ArrayList<String>(); private List<ImageView> imagelist=new ArrayList<ImageView>(); private int current=0; private int old_list=0; private String string; private Handler h=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==1){ int i=msg.arg1; //设置viewpager当前的播放位置 vp.setCurrentItem(i); //设置当前的标题对应的图片 tv.setText(str.get(i%imagelist.size())); //设置圆点当然播放对应的图片的颜色的变化 dolist.get(old_list).setBackgroundResource(R.drawable.shape); dolist.get(i%imagelist.size()).setBackgroundResource(R.drawable.shape1); old_list=i%imagelist.size(); } } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //找到布局文件 View v = View.inflate(getActivity(), R.layout.listview, null); //ListView控件 list = (XListView)v.findViewById(R.id.list); vp= (ViewPager) v.findViewById(R.id.vp); tv=(TextView)v.findViewById(R.id.tv) ; ll=(LinearLayout)v.findViewById(R.id.ll); //设置打开上拉下拉的开关 list.setPullLoadEnable(true); //设置 list.setXListViewListener(this); return v; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle bundle = getArguments(); //接收传递过来的值 string = bundle.getString("name"); //调用解析方法 Jiexi(string); //获取图片的路径及biati getPricUrLandTitle(); } //解析方法 private void Jiexi(final String string) { //使用异步 new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { String str=""; try { URL url = new URL("http://v.juhe.cn/toutiao/index?type=" + string + "&key=597b4f9dcb50e051fd725a9ec54d6653"); HttpURLConnection conne= (HttpURLConnection) url.openConnection(); conne.setConnectTimeout(5000); conne.setReadTimeout(5000); int responseCode = conne.getResponseCode(); if (responseCode==200){ InputStream in = conne.getInputStream(); byte[] by=new byte[1024]; int len=0; while ((len=in.read(by))!=-1){ str+=new String(by,0,len); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //Gson解析 Gson gson = new Gson(); User user = gson.fromJson(s, User.class); data = user.getResult().getData(); //listview适配器 myadpader = new Myadpader1(data, getActivity()); list.setAdapter(myadpader); } }.execute(); }
//获取图片的路径及biatiprivate void getPricUrLandTitle() { //异步任务
new AsyncTask<String,Integer,String>(){
@Override protected String doInBackground(String... strings) {
String str="";
try {
URL url = new URL(surl);
HttpURLConnection http=(HttpURLConnection) url.openConnection();
int code = http.getResponseCode();
if(code==200){
InputStream in = http.getInputStream();
byte[] b=new byte[1024];
int len=0;
while((len=in.read(b))!=-1){
str+=new String(b,0,len);
}
}
} catch (MalformedURLException e)
{ e.printStackTrace(); }
catch (IOException e)
{ e.printStackTrace(); }
return str;
}
@Override protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
newslist = gson.fromJson(s, JavaBean.class).getNewslist();
for (int i=0;i<newslist.size();i++){
JavaBean.NewslistBean newslistBean = newslist.get(i);
String picUrl = newslistBean.getPicUrl();
String title = newslistBean.getTitle();
Log.i("TAG",picUrl);
//获取网络请求的图片数据,并把它添加到imagelist中
getImageView(picUrl);
//得到圆点
getYuanDian();
//标题
str.add(title);
}
//执行的方法
init();
}
}.execute();
}
private void getImageView(String picUrl) {
ImageView imageView = new ImageView(getActivity());
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageSize size=new ImageSize(200,100);
ImageLoader.getInstance().displayImage(picUrl,imageView,size);
imagelist.add(imageView); }
private void getYuanDian() {
View view = LayoutInflater.from(getActivity()).inflate(R.layout.item, null);
View view1 = view.findViewById(R.id.view);
//将试图添加到收集圆点的集合中
dolist.add(view1);
//将圆点的视图加载在Linearlayout的占位上
ll.addView(view);
}
private void init() {
//设置适配器
vp.setAdapter(new PagerAdapter() {
@Override
public int getCount() {
return Integer.MAX_VALUE; }
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object; }
@Override
public Object instantiateItem(ViewGroup container, int position) {
View imageView = imagelist.get(position % imagelist.size());
container.addView(imageView); return imageView; }
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
});
//设置圆点的第一个被选中
dolist.get(0).setBackgroundResource(R.drawable.shape1);
//设置viewpager的当前位置
vp.setCurrentItem(50000000);
//启动定时器
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
current=vp.getCurrentItem()+1;
Message msg = Message.obtain();
msg.arg1=current;
msg.what=1;
h.sendMessage(msg);
}
}, 3000, 2000); }
@Override
public void onRefresh() {
Jiexi(surl);
stopLoad();
}
@Override
public void onLoadMore() {
//使用异步进行网络请求数据
new AsyncTask<String,Integer,String>(){
@Override
protected String doInBackground(String... strings) {
String str="";
try {
URL url = new URL("http://v.juhe.cn/toutiao/index?type=" + string + "&key=597b4f9dcb50e051fd725a9ec54d6653");
HttpURLConnection conne= (HttpURLConnection) url.openConnection();
conne.setConnectTimeout(5000);
conne.setReadTimeout(5000);
int responseCode = conne.getResponseCode();
if (responseCode==200){
InputStream in = conne.getInputStream();
byte[] by=new byte[1024];
int len=0;
while ((len=in.read(by))!=-1){
str+=new String(by,0,len);
}
}
} catch (MalformedURLException e)
{ e.printStackTrace(); }
catch (IOException e)
{ e.printStackTrace(); }
return str;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//Gson解析
Gson gson = new Gson();
User user = gson.fromJson(s, User.class);
List<User.ResultBean.DataBean> data1 = user.getResult().getData(); data.addAll(data1);
//listview适配器
myadpader.notifyDataSetChanged();
stopLoad();
}
}.execute();
}
public void stopLoad(){
list.stopRefresh();
list.stopLoadMore();
list.setRefreshTime("刚刚");
}
}
//Xlistview写适配器
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.shenxuesong.jinritoutiao.R; import com.example.shenxuesong.jinritoutiao.User; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageSize; import java.util.ArrayList; import java.util.List; public class Myadpader1 extends BaseAdapter { private List<User.ResultBean.DataBean> data=new ArrayList<User.ResultBean.DataBean>(); private Context context; public Myadpader1(List<User.ResultBean.DataBean> data, Context context) { this.data = data; this.context = context; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } //判断子条目的布局 @Override public int getItemViewType(int position) { int re=0; if(data.get(position).getThumbnail_pic_s()!=null&&data.get(position).getThumbnail_pic_s02()!=null&&data.get(position).getThumbnail_pic_s03()!=null){ re=0; } else if(data.get(position).getThumbnail_pic_s()!=null&&data.get(position).getThumbnail_pic_s02()!=null&&data.get(position).getThumbnail_pic_s03()==null){ re=1; } else if(data.get(position).getThumbnail_pic_s()!=null&&data.get(position).getThumbnail_pic_s02()==null&&data.get(position).getThumbnail_pic_s03()==null){ re=2; } return re; } //子条目布局的数量 @Override public int getViewTypeCount() { return 3; } @Override public View getView(int i, View view, ViewGroup viewGroup) { //Xlistview的优化 ViewHolder1 holder1=null; ViewHolder2 holder2=null; ViewHolder3 holder3=null; int re = getItemViewType(i); if(re==0){ if(view==null){ view=View.inflate(context,R.layout.item1,null); holder1=new ViewHolder1(); holder1.tv=(TextView) view.findViewById(R.id.tv); holder1.image1=(ImageView)view.findViewById(R.id.image1); holder1.image2=(ImageView)view.findViewById(R.id.image2); holder1.image3=(ImageView)view.findViewById(R.id.image3); view.setTag(holder1); }else{ holder1= (ViewHolder1) view.getTag(); } holder1.tv.setText(data.get(i).getTitle()+"\n"+data.get(i).getAuthor_name()+"\n"+data.get(i).getDate()); String thumbnail_pic_s = data.get(i).getThumbnail_pic_s(); String thumbnail_pic_s02 = data.get(i).getThumbnail_pic_s02(); String thumbnail_pic_s03 = data.get(i).getThumbnail_pic_s03(); ImageSize size=new ImageSize(100,100); ImageLoader.getInstance().displayImage(thumbnail_pic_s,holder1.image1,size); ImageLoader.getInstance().displayImage(thumbnail_pic_s02,holder1.image2,size); ImageLoader.getInstance().displayImage(thumbnail_pic_s03,holder1.image3,size); }else if(re==1){ if(view==null){ view=View.inflate(context,R.layout.item2,null); holder2=new ViewHolder2(); holder2.tv=(TextView) view.findViewById(R.id.tv); holder2.image1=(ImageView)view.findViewById(R.id.image1); holder2.image2=(ImageView)view.findViewById(R.id.image2); view.setTag(holder2); }else{ holder2= (ViewHolder2) view.getTag(); } holder2.tv.setText(data.get(i).getTitle()+"\n"+data.get(i).getAuthor_name()+"\n"+data.get(i).getDate()); String thumbnail_pic_s = data.get(i).getThumbnail_pic_s(); String thumbnail_pic_s02 = data.get(i).getThumbnail_pic_s02(); ImageSize size=new ImageSize(100,100); ImageLoader.getInstance().displayImage(thumbnail_pic_s,holder2.image1,size); ImageLoader.getInstance().displayImage(thumbnail_pic_s02,holder2.image2,size); }else if(re==2){ if(view==null){ view=View.inflate(context, R.layout.item3,null); holder3=new ViewHolder3(); holder3.tv=(TextView) view.findViewById(R.id.tv); holder3.image1=(ImageView)view.findViewById(R.id.image1); view.setTag(holder3); }else{ holder3= (ViewHolder3) view.getTag(); } holder3.tv.setText(data.get(i).getTitle()+"\n"+data.get(i).getAuthor_name()+"\n"+data.get(i).getDate()); String thumbnail_pic_s = data.get(i).getThumbnail_pic_s(); ; ImageSize size=new ImageSize(100,100); //ImagerLoader加载图片 ImageLoader.getInstance().displayImage(thumbnail_pic_s,holder3.image1,size); } return view; } class ViewHolder3{ TextView tv; ImageView image1; } class ViewHolder2{ TextView tv; ImageView image1; ImageView image2; } class ViewHolder1{ TextView tv; ImageView image1; ImageView image2; ImageView image3; } }
写子条目的布局(item1.xml,item2.xml,item3.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image1"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image2"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image3"/> </LinearLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image1"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image2"/> </LinearLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/image1"/> </LinearLayout>
//网络图片的加载
import android.app.Application; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration con=new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(con); } }
//最后AndroidMainfest.xml的权限的配置
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.shenxuesong.pulltorerfuer"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:name=".MyApplication" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.Light"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
相关文章推荐
- 安卓微博客户端 第二天 系统主框架的搭建
- 安卓 框架搭建
- android实现高仿新版今日头条app1(框架部分)
- 安卓市场--框架搭建5
- 安卓市场--框架搭建2
- 不容错过,最全的安卓架构合集-(从零开始搭建android框架系列(2))
- 不容错过,最全的安卓架构合集【从零开始搭建android框架系列(2)】
- 安卓学习笔记---仿今日头条最强顶部导航指示器,支持6种模式
- 类似今日头条头布局的界面搭建
- (一)安卓框架搭建之项目分层、主题、gradle基本配置
- 安卓市场---框架搭建4
- 手把手教你如何搭建一个自己的安卓快速开发框架之带你做自己的APP(三)
- (二)安卓框架搭建之项目Butterknife引入,Application的简单封装
- 不容错过,最全的安卓架构合集【从零开始搭建android框架系列(2)】
- 安卓市场---框架搭建4
- 安卓应用框架搭建Application
- (三)安卓框架搭建之MVP+Retrofit+RxJava基础
- 话说安卓MVP框架搭建和优缺点
- (四)安卓框架搭建之MVP+Retrofit+RxJava优化
- 手把手教你如何搭建一个自己的安卓快速开发框架之带你做自己的APP(四)