星空网 > 软件开发 > 操作系统

模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

需要用到的lib包 :解析json  gson包,从网络地址解析json数据成String字符串的异步网络解析工具AsyncHttpClient等

下载地址:点击下载

Xlistview 下拉上拉第三方框架  点击下载  

 侧滑菜单的lib  点击下载

 1 package com.lixu.testjsonall; 2  3 import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; 4 import com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity; 5 import com.lixu.testjsonall.fragments.Cehua_Fragment; 6 import com.lixu.testjsonall.fragments.Fragment_one; 7 import com.lixu.testjsonall.fragments.Fragment_tiyuxinwen; 8 import com.lixu.testjsonall.fragments.Fragment_yulexinwen; 9 import android.os.Bundle;10 import android.view.Window;11 12 // 实现三个Fragment的接口类来实现回调13 public class MainActivity extends SlidingActivity implements Cehua_Fragment.SetonCehuaFragmentClickListener,14     Fragment_one.SetonFragmentOneClickListener, Fragment_tiyuxinwen.SetonFragmentTiyuxinwenClickListener,15     Fragment_yulexinwen.SetonFragmentYulexinwenClickListener {16 17   @Override18   public void onCreate(Bundle savedInstanceState) {19     super.onCreate(savedInstanceState);20     requestWindowFeature(Window.FEATURE_NO_TITLE);21     setContentView(R.layout.activity_main);22 23     getFragmentManager().beginTransaction().add(R.id.main_framelayout, Fragment_one.newFragment()).commit();24     // 设置滑出菜单为demo中转样式25     setBehindContentView(R.layout.demo);26     // 将中转demo布局替换为自定义滑出菜单样式27     getFragmentManager().beginTransaction().add(R.id.demo, Cehua_Fragment.newFragment()).commit();28     // 获取菜单滑出菜单实例29     SlidingMenu slidingMenu = getSlidingMenu();30     // 设置滑出菜单的停止宽度31     slidingMenu.setBehindOffsetRes(R.dimen.weight);32 33   }34 35   @Override36   public void loadxinwen() {37     getFragmentManager().beginTransaction().replace(R.id.main_framelayout, Fragment_one.newFragment()).commit();38     // 添加界面后关闭侧滑按钮框39     toggle();40   }41 42   @Override43   public void loadyulexinwen() {44     getFragmentManager().beginTransaction().replace(R.id.main_framelayout, Fragment_yulexinwen.newFragment())45         .commit();46     toggle();47   }48 49   @Override50   public void loadtiyuxinwen() {51     getFragmentManager().beginTransaction().replace(R.id.main_framelayout, Fragment_tiyuxinwen.newFragment())52         .commit();53     toggle();54   }55 56   @Override57   public void back() {58     toggle();59 60   }61 62 }

 1 package com.lixu.testjsonall.fragments; 2  3 import com.lixu.testjsonall.R; 4 import android.app.Activity; 5 import android.app.Fragment; 6 import android.os.Bundle; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.View.OnClickListener;10 import android.view.ViewGroup;11 12 public class Cehua_Fragment extends Fragment {13   // 设置回调机制14   private SetonCehuaFragmentClickListener mSetonCehuaFragmentClickListener;15 16   public interface SetonCehuaFragmentClickListener {17     void loadxinwen();18 19     void loadyulexinwen();20 21     void loadtiyuxinwen();22   }23 24   @Override25   public void onAttach(Activity activity) {26     super.onAttach(activity);27     if (activity instanceof SetonCehuaFragmentClickListener) {28       mSetonCehuaFragmentClickListener = (SetonCehuaFragmentClickListener) activity;29     } else {30       throw new RuntimeException(activity.toString() + " must implement 接口");31     }32   }33 34   @Override35   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {36     View view = inflater.inflate(R.layout.cehua_menu, null);37     return view;38   }39 40   @Override41   public void onActivityCreated(Bundle savedInstanceState) {42     getView().findViewById(R.id.monixinweijiem).setOnClickListener(new OnClickListener() {43 44       @Override45       public void onClick(View v) {46         mSetonCehuaFragmentClickListener.loadxinwen();47       }48     });49     getView().findViewById(R.id.yulexinwen).setOnClickListener(new OnClickListener() {50 51       @Override52       public void onClick(View v) {53         mSetonCehuaFragmentClickListener.loadyulexinwen();54       }55     });56     getView().findViewById(R.id.tiyuxinwen).setOnClickListener(new OnClickListener() {57 58       @Override59       public void onClick(View v) {60         mSetonCehuaFragmentClickListener.loadtiyuxinwen();61       }62     });63 64     super.onActivityCreated(savedInstanceState);65   }66 67   public static Cehua_Fragment newFragment() {68     Cehua_Fragment f = new Cehua_Fragment();69     return f;70   }71 }

 1 package com.lixu.testjsonall.fragments; 2  3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import com.google.gson.Gson; 7 import com.lixu.testjsonall.R; 8 import com.lixu.testjsonall.json_info.Info; 9 import com.lixu.testjsonall.json_info.Infoall; 10 import com.lixu.testjsonall.json_info.MerchantKey; 11 import com.lixu.testjsonall.untils.Untils; 12 import com.loopj.android.http.AsyncHttpClient; 13 import com.loopj.android.http.TextHttpResponseHandler; 14 import com.scxh.slider.library.SliderLayout; 15 import com.scxh.slider.library.SliderTypes.BaseSliderView; 16 import com.scxh.slider.library.SliderTypes.TextSliderView; 17 import com.squareup.picasso.Picasso; 18 import android.app.Activity; 19 import android.app.Fragment; 20 import android.content.Context; 21 import android.os.Bundle; 22 import android.view.LayoutInflater; 23 import android.view.View; 24 import android.view.View.OnClickListener; 25 import android.view.ViewGroup; 26 import android.widget.ArrayAdapter; 27 import android.widget.ImageView; 28 import android.widget.ProgressBar; 29 import android.widget.TextView; 30 import android.widget.Toast; 31 import cz.msebera.android.httpclient.Header; 32 import me.maxwin.view.XListView; 33 import me.maxwin.view.XListView.IXListViewListener; 34  35 public class Fragment_one extends Fragment { 36   private String net_url = "http://192.168.1.124:8080/json/around"; 37   private MyAdapter mMyAdapter; 38   private ProgressBar mProgressBar; 39   private SliderLayout mSliderLayout; 40   private XListView lv; 41   // 两种布局指针 42   private static final int TYPE_ONE = 0; 43   private static final int TYPE_TWO = 1; 44  45   // 设置回调机制 46   private SetonFragmentOneClickListener mSetonFragmentOneClickListener; 47  48   public interface SetonFragmentOneClickListener { 49     void back(); 50  51   } 52  53   @Override 54   public void onAttach(Activity activity) { 55     super.onAttach(activity); 56     if (activity instanceof SetonFragmentOneClickListener) { 57       mSetonFragmentOneClickListener = (SetonFragmentOneClickListener) activity; 58     } else { 59       throw new RuntimeException(activity.toString() + " must implement 接口"); 60     } 61   } 62  63   public static Fragment newFragment() { 64     Fragment_one f = new Fragment_one(); 65     return f; 66   } 67  68   @Override 69   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 70     View view = inflater.inflate(R.layout.fragment_one, null); 71     return view; 72   } 73  74   @Override 75   public void onActivityCreated(Bundle savedInstanceState) { 76     lv = (XListView) getView().findViewById(R.id.xlv); 77     mProgressBar = (ProgressBar) getView().findViewById(R.id.progressbar); 78     // 找到返回图片按钮 通过回调机制点击设置返回 79     getView().findViewById(R.id.fanhui).setOnClickListener(new OnClickListener() { 80  81       @Override 82       public void onClick(View v) { 83         mSetonFragmentOneClickListener.back(); 84  85       } 86     }); 87  88     mMyAdapter = new MyAdapter(getActivity(), -1); 89  90     View view = LayoutInflater.from(getActivity()).inflate(R.layout.listhead, null); 91     mSliderLayout = (SliderLayout) view.findViewById(R.id.sliderlayout); 92     // 将图片坐标点移动到布局右下角 93     mSliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Right_Bottom); 94     // 添加到listview头部 95     lv.addHeaderView(view); 96  97     // 遍历hashmap的方法 98     HashMap<String, String> map = Untils.getData(); 99     for (String n : map.keySet()) {100       String key = n;101       String txt = map.get(key);102       TextSliderView tsv = new TextSliderView(getActivity());103       tsv.description(key);104       tsv.image(txt);105 106       // 将滚动图片根据边框大小居中按正常图片剪切显示107       tsv.setScaleType(BaseSliderView.ScaleType.CenterCrop);108       mSliderLayout.addSlider(tsv);109     }110 111     // 数据加载前显示进度转动条112     lv.setEmptyView(mProgressBar);113     lv.setAdapter(mMyAdapter);114     // 初始获取数据115     GetAsynchttpdata();116     // 设置上拉刷新117     lv.setPullLoadEnable(true);118     lv.setXListViewListener(new IXListViewListener() {119 120       @Override121       public void onRefresh() {122         // 上拉获取数据123         GetAsynchttpdata();124         // 设置刷新时间125         lv.setRefreshTime(Untils.formatTimeInMillis(System.currentTimeMillis()));126       }127 128       @Override129       public void onLoadMore() {130         // 下拉获取数据131         GetAsynchttpdata();132       }133     });134     super.onActivityCreated(savedInstanceState);135   }136 137   // 第三方获取网络数据类138   private void GetAsynchttpdata() {139     AsyncHttpClient ahc = new AsyncHttpClient();140     ahc.get(net_url, new TextHttpResponseHandler() {141       // 通过网络地址解析Json数据成String类型142       @Override143       public void onFailure(int arg0, Header[] arg1, String arg2, Throwable arg3) {144         Toast.makeText(getActivity(), "错误!", 0).show();145 146       }147 148       @Override149       public void onSuccess(int arg0, Header[] arg1, String arg2) {150         // 从字符串中解析json文件151         Gson gson = new Gson();152         Infoall infoall = gson.fromJson(arg2, Infoall.class);153         Info info = infoall.getInfo();154         List<MerchantKey> mMerchantKey = info.getMerchantKey();155         mMyAdapter.setList(mMerchantKey);156         // 刷新完毕后停止上拉和下拉刷新图标显示157         lv.stopRefresh();158         lv.stopLoadMore();159 160       }161     });162 163   }164 165   private class MyAdapter extends ArrayAdapter {166 167     private LayoutInflater flater;168     private List<MerchantKey> data = new ArrayList<MerchantKey>();169     private Context context;170 171     public MyAdapter(Context context, int resource) {172       super(context, resource);173       this.context = context;174       flater = LayoutInflater.from(context);175     }176 177     public void setList(List<MerchantKey> data) {178       this.data = data;179       mMyAdapter.notifyDataSetChanged();180     }181 182     // 第一种布局183     public View getViewOne(int position, View convertView, ViewGroup parent) {184 185       Viewdata mviewdata = null;186       if (convertView == null) {187         // 一级优化,view可以复用缓存188         mviewdata = new Viewdata();189         convertView = flater.inflate(R.layout.list, null);190         mviewdata.biaoti = (TextView) convertView.findViewById(R.id.list_name_txt);191         mviewdata.biaoti2 = (TextView) convertView.findViewById(R.id.list_coupe_txt);192         mviewdata.dizhi = (TextView) convertView.findViewById(R.id.list_location_txt);193         mviewdata.juli = (TextView) convertView.findViewById(R.id.list_distance_txt);194         mviewdata.jpg = (ImageView) convertView.findViewById(R.id.list_icon_img);195         mviewdata.tuan = (ImageView) convertView.findViewById(R.id.list_group_img);196         mviewdata.quan = (ImageView) convertView.findViewById(R.id.list_ticket_img);197         mviewdata.ka = (ImageView) convertView.findViewById(R.id.list_card_img);198         convertView.setTag(mviewdata);199       }200       // 二级优化 ,只找到一次控件,不会每次都通过R文件找到控件201       mviewdata = (Viewdata) convertView.getTag();202       mviewdata.biaoti.setText(data.get(position).getName());203       mviewdata.biaoti2.setText(data.get(position).getCoupon());204       mviewdata.dizhi.setText(data.get(position).getLocation());205       mviewdata.juli.setText(data.get(position).getDistance());206       Picasso.with(context).load(data.get(position).getPicUrl()).into(mviewdata.jpg);207 208       if (data.get(position).getGroupType().equals("YES")) {209         mviewdata.tuan.setVisibility(View.VISIBLE);210       } else {211         mviewdata.tuan.setVisibility(View.GONE);212       }213       if (data.get(position).getCardType().equals("YES")) {214         mviewdata.ka.setVisibility(View.VISIBLE);215       } else {216         mviewdata.ka.setVisibility(View.GONE);217       }218       if (data.get(position).getCouponType().equals("YES")) {219         mviewdata.quan.setVisibility(View.VISIBLE);220       } else {221         mviewdata.quan.setVisibility(View.GONE);222       }223 224       return convertView;225 226     }227 228     // 第二种布局229     public View getViewTwo(int position, View convertView, ViewGroup parent) {230 231       Viewdata2 mviewdata2 = null;232       if (convertView == null) {233         // 一级优化,view可以复用缓存234         mviewdata2 = new Viewdata2();235         convertView = flater.inflate(R.layout.list2, null);236         mviewdata2.biaoti2 = (TextView) convertView.findViewById(R.id.list_name_txt2);237         mviewdata2.biaoti22 = (TextView) convertView.findViewById(R.id.list_coupe_txt2);238         mviewdata2.juli2 = (TextView) convertView.findViewById(R.id.list_distance2_txt);239         mviewdata2.jpg2 = (ImageView) convertView.findViewById(R.id.list_icon_img2);240         convertView.setTag(mviewdata2);241       }242       // 二级优化 ,只找到一次控件,不会每次都通过R文件找到控件243       mviewdata2 = (Viewdata2) convertView.getTag();244       mviewdata2.biaoti2.setText(data.get(position).getName());245       mviewdata2.biaoti22.setText(data.get(position).getCoupon());246       mviewdata2.juli2.setText(data.get(position).getDistance());247       Picasso.with(context).load(data.get(position).getPicUrl()).into(mviewdata2.jpg2);248 249       return convertView;250 251     }252 253     // 控件类254     private class Viewdata {255       TextView biaoti;256       TextView biaoti2;257       TextView dizhi;258       TextView juli;259       ImageView jpg;260       ImageView tuan;261       ImageView quan;262       ImageView ka;263 264     }265 266     // 第二个布局的控件类267     private class Viewdata2 {268       TextView biaoti2;269       TextView biaoti22;270       TextView juli2;271       ImageView jpg2;272 273     }274 275     @Override276     public View getView(int position, View convertView, ViewGroup parent) {277       if (getItemViewType(position) == TYPE_ONE) {278         return getViewOne(position, convertView, parent);279       } else {280         return getViewTwo(position, convertView, parent);281       }282     }283 284     @Override285     public int getItemViewType(int position) {286       // 设置对大小写不敏感 --equalsIgnoreCase287       if (data.get(position).getCouponType().equalsIgnoreCase("YES")) {288         return TYPE_ONE;289 290       } else {291         return TYPE_TWO;292       }293 294     }295 296     // 获取返回view的两种类型 不写这个方法容易报错误。。297     @Override298     public int getViewTypeCount() {299       return 2;300     }301 302     @Override303     public int getCount() {304 305       return data.size();306     }307 308   }309 310   // 程序退出时销毁311   @Override312   public void onDestroy() {313     super.onDestroy();314     if (mSliderLayout != null) {315       mSliderLayout.stopAutoCycle();316       mSliderLayout = null;317     }318   }319 320 }

 1 package com.lixu.testjsonall.fragments; 2  3 import com.lixu.testjsonall.R; 4 import android.app.Activity; 5 import android.app.Fragment; 6 import android.os.Bundle; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.View.OnClickListener;10 import android.view.ViewGroup;11 12 public class Fragment_tiyuxinwen extends Fragment {13   // 设置回调机制14   private SetonFragmentTiyuxinwenClickListener mSetonFragmentTiyuxinwenClickListener;15 16   public interface SetonFragmentTiyuxinwenClickListener {17     void back();18 19   }20 21   @Override22   public void onAttach(Activity activity) {23     super.onAttach(activity);24     if (activity instanceof SetonFragmentTiyuxinwenClickListener) {25       mSetonFragmentTiyuxinwenClickListener = (SetonFragmentTiyuxinwenClickListener) activity;26     } else {27       throw new RuntimeException(activity.toString() + " must implement 接口");28     }29   }30 31   public static Fragment newFragment() {32     Fragment_tiyuxinwen f = new Fragment_tiyuxinwen();33     return f;34   }35 36   @Override37   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {38     return inflater.inflate(R.layout.yulexinwen, null);39   }40 41   @Override42   public void onActivityCreated(Bundle savedInstanceState) {43     super.onActivityCreated(savedInstanceState);44     getView().findViewById(R.id.fanhui).setOnClickListener(new OnClickListener() {45 46       @Override47       public void onClick(View v) {48         mSetonFragmentTiyuxinwenClickListener.back();49 50       }51     });52   }53 54 }

 1 package com.lixu.testjsonall.fragments; 2  3 import com.lixu.testjsonall.R; 4 import android.app.Activity; 5 import android.app.Fragment; 6 import android.os.Bundle; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.ViewGroup;10 import android.view.View.OnClickListener;11 12 public class Fragment_yulexinwen extends Fragment {13   // 设置回调机制14   private SetonFragmentYulexinwenClickListener mSetonFragmentYulexinwenClickListener;15 16   public interface SetonFragmentYulexinwenClickListener {17     void back();18 19   }20 21   @Override22   public void onAttach(Activity activity) {23     super.onAttach(activity);24     if (activity instanceof SetonFragmentYulexinwenClickListener) {25       mSetonFragmentYulexinwenClickListener = (SetonFragmentYulexinwenClickListener) activity;26     } else {27       throw new RuntimeException(activity.toString() + " must implement 接口");28     }29   }30 31   public static Fragment newFragment() {32     Fragment_yulexinwen f = new Fragment_yulexinwen();33     return f;34   }35 36   @Override37   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {38     return inflater.inflate(R.layout.tiyuxinwen, null);39   }40 41   @Override42   public void onActivityCreated(Bundle savedInstanceState) {43     super.onActivityCreated(savedInstanceState);44     getView().findViewById(R.id.fanhui).setOnClickListener(new OnClickListener() {45 46       @Override47       public void onClick(View v) {48         mSetonFragmentYulexinwenClickListener.back();49 50       }51     });52   }53 54 }

 1 package com.lixu.testjsonall.json_info; 2  3 import java.util.List; 4  5 public class Info { 6   private List<MerchantKey> merchantKey; 7  8   public List<MerchantKey> getMerchantKey() { 9     return merchantKey;10   }11 12   public void setMerchantKey(List<MerchantKey> merchantKey) {13     this.merchantKey = merchantKey;14   }15 16 }

 1 package com.lixu.testjsonall.json_info; 2  3 public class Infoall { 4  5   private Info info; 6  7   public Info getInfo() { 8     return info; 9   }10 11   public void setInfo(Info info) {12     this.info = info;13   }14 15 }

 1 package com.lixu.testjsonall.json_info; 2  3 public class MerchantKey { 4   private String name; 5   private String coupon; 6   private String location; 7   private String distance; 8   private String picUrl; 9   private String couponType;10   private String cardType;11   private String groupType;12 13   public String getName() {14     return name;15   }16 17   public void setName(String name) {18     this.name = name;19   }20 21   public String getCoupon() {22     return coupon;23   }24 25   public void setCoupon(String coupon) {26     this.coupon = coupon;27   }28 29   public String getLocation() {30     return location;31   }32 33   public void setLocation(String location) {34     this.location = location;35   }36 37   public String getDistance() {38     return distance;39   }40 41   public void setDistance(String distance) {42     this.distance = distance;43   }44 45   public String getPicUrl() {46     return picUrl;47   }48 49   public void setPicUrl(String picUrl) {50     this.picUrl = picUrl;51   }52 53   public String getCouponType() {54     return couponType;55   }56 57   public void setCouponType(String couponType) {58     this.couponType = couponType;59   }60 61   public String getCardType() {62     return cardType;63   }64 65   public void setCardType(String cardType) {66     this.cardType = cardType;67   }68 69   public String getGroupType() {70     return groupType;71   }72 73   public void setGroupType(String groupType) {74     this.groupType = groupType;75   }76 77 }

 1 package com.lixu.testjsonall.untils; 2  3 import java.text.SimpleDateFormat; 4 import java.util.Calendar; 5 import java.util.Date; 6 import java.util.HashMap; 7  8 public class Untils { 9   public static String formatTimeInMillis(long timeInMillis) {10     Calendar cal = Calendar.getInstance();11     cal.setTimeInMillis(timeInMillis);12     Date date = cal.getTime();13     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");14     String fmt = dateFormat.format(date);15 16     return fmt;17   }18 19   // 头部数据类20   public static HashMap<String, String> getData() {21     HashMap<String, String> http_url_maps = new HashMap<String, String>();22     http_url_maps.put("天津**", "http://img.my.csdn.net/uploads/201407/26/1406383291_6518.jpg");23     http_url_maps.put("四川乐山犍为发生4.2级地震", "http://img.my.csdn.net/uploads/201407/26/1406383290_9329.jpg");24     http_url_maps.put("成都重度雾霾", "http://img.my.csdn.net/uploads/201407/26/1406383290_1042.jpg");25     http_url_maps.put("苹果公司何去何从?", "http://img.my.csdn.net/uploads/201407/26/1406383275_3977.jpg");26 27     return http_url_maps;28   }29 }

1 <FrameLayout ="http://schemas.android.com/apk/res/android"2   ="http://schemas.android.com/tools"3   android:id="@+id/main_framelayout"4   android:layout_width="match_parent"5   android:layout_height="match_parent"6   android:orientation="vertical"7   tools:context="com.lixu.testjsonall.MainActivity" >8 9 </FrameLayout>

 1 <??> 2 <LinearLayout ="http://schemas.android.com/apk/res/android" 3   android:layout_width="match_parent" 4   android:layout_height="match_parent" 5   android:background="@drawable/background" 6   android:orientation="vertical" > 7  8   <TextView 9     android:layout_width="match_parent"10     android:layout_height="wrap_content"11     android:gravity="center"12     android:text="选择您要的项目"13     android:textColor="#03A9F4"14     android:textSize="25sp" />15 16   <Button17     android:id="@+id/monixinweijiem"18     android:layout_width="match_parent"19     android:layout_height="wrap_content"20     android:text="模拟新闻界面" />21 22   <Button23     android:id="@+id/yulexinwen"24     android:layout_width="match_parent"25     android:layout_height="wrap_content"26     android:text="娱乐新闻" />27 28   <Button29     android:id="@+id/tiyuxinwen"30     android:layout_width="match_parent"31     android:layout_height="wrap_content"32     android:text="体育新闻" />33 34 </LinearLayout>

1 <??>2 <FrameLayout ="http://schemas.android.com/apk/res/android"3   android:id="@+id/demo"4   android:layout_width="match_parent"5   android:layout_height="match_parent" >6 7 </FrameLayout>

 1 <LinearLayout ="http://schemas.android.com/apk/res/android" 2   ="http://schemas.android.com/tools" 3   android:layout_width="match_parent" 4   android:layout_height="match_parent" 5   android:orientation="vertical" 6   tools:context="com.lixu.testjsonall.MainActivity" > 7  8   <include layout="@layout/title_layout" /> 9 10   <FrameLayout11     android:layout_width="match_parent"12     android:layout_height="match_parent" >13 14     <me.maxwin.view.XListView15       android:id="@+id/xlv"16       android:layout_width="match_parent"17       android:layout_height="match_parent" />18 19     <ProgressBar20       android:id="@+id/progressbar"21       android:layout_width="wrap_content"22       android:layout_height="wrap_content"23       android:layout_gravity="center" />24   </FrameLayout>25 26 </LinearLayout>

 1 <??> 2 <RelativeLayout ="http://schemas.android.com/apk/res/android" 3   android:layout_width="match_parent" 4   android:layout_height="80dp" 5   android:background="@android:color/white" > 6  7   <ImageView 8     android:id="@+id/list_icon_img" 9     android:layout_width="80dp"10     android:layout_height="80dp"11     android:src='/images/loading.gif' data-original="@drawable/ic_launcher" />12 13   <TextView14     android:id="@+id/list_name_txt"15     android:layout_width="wrap_content"16     android:layout_height="wrap_content"17     android:layout_toRightOf="@id/list_icon_img"18     android:singleLine="true"19     android:text="瑞庭竹岛酒店"20     android:textColor="@android:color/background_dark"21     android:textSize="16sp" />22 23   <TextView24     android:id="@+id/list_coupe_txt"25     android:layout_width="wrap_content"26     android:layout_height="wrap_content"27     android:layout_below="@id/list_name_txt"28     android:layout_toRightOf="@id/list_icon_img"29     android:singleLine="true"30     android:text="网上预定入住可享返现优惠"31     android:textColor="@android:color/holo_red_dark"32     android:textSize="14sp" />33 34   <TextView35     android:id="@+id/list_distance_txt"36     android:layout_width="wrap_content"37     android:layout_height="wrap_content"38     android:layout_alignParentBottom="true"39     android:layout_alignParentRight="true"40     android:layout_marginRight="10dp"41     android:drawableLeft="@drawable/info_map"42     android:text="2.0k"43     android:textColor="@android:color/tab_indicator_text"44     android:textSize="14sp" />45 46   <TextView47     android:id="@+id/list_location_txt"48     android:layout_width="wrap_content"49     android:layout_height="wrap_content"50     android:layout_alignParentBottom="true"51     android:layout_toLeftOf="@id/list_distance_txt"52     android:layout_toRightOf="@id/list_icon_img"53     android:singleLine="true"54     android:text="四川省成都市高新区老成仁路8号成都市高新区老成都市高新区老成都市高新区老成都市高新区老"55     android:textColor="@android:color/tab_indicator_text"56     android:textSize="14sp" />57 58   <RelativeLayout59     android:layout_width="wrap_content"60     android:layout_height="wrap_content"61     android:layout_alignParentRight="true"62     android:layout_alignParentTop="true" >63 64     <ImageView65       android:id="@+id/list_card_img"66       android:layout_width="wrap_content"67       android:layout_height="wrap_content"68       android:src='/images/loading.gif' data-original="@drawable/near_card" />69 70     <ImageView71       android:id="@+id/list_group_img"72       android:layout_width="wrap_content"73       android:layout_height="wrap_content"74       android:layout_toRightOf="@id/list_card_img"75       android:src='/images/loading.gif' data-original="@drawable/near_group" />76 77     <ImageView78       android:id="@+id/list_ticket_img"79       android:layout_width="wrap_content"80       android:layout_height="wrap_content"81       android:layout_toRightOf="@id/list_group_img"82       android:src='/images/loading.gif' data-original="@drawable/near_ticket" />83   </RelativeLayout>84 85 </RelativeLayout>

 1 <??> 2 <RelativeLayout ="http://schemas.android.com/apk/res/android" 3   android:layout_width="match_parent" 4   android:layout_height="80dp" 5   android:background="@android:color/white" > 6  7   <TextView 8     android:id="@+id/list_distance2_txt" 9     android:layout_width="wrap_content"10     android:layout_height="wrap_content"11     android:layout_alignParentBottom="true"12     android:layout_alignParentRight="true"13     android:layout_marginRight="10dp"14     android:drawableLeft="@drawable/info_map"15     android:text="2.0k"16     android:textColor="@android:color/tab_indicator_text"17     android:textSize="14sp" />18 19 20   <TextView21     android:id="@+id/list_name_txt2"22     android:layout_width="wrap_content"23     android:layout_height="wrap_content"24     android:layout_alignParentLeft="true"25     android:layout_alignParentTop="true"26     android:singleLine="true"27     android:text="瑞庭竹岛酒店"28     android:textColor="@android:color/background_dark"29     android:textSize="16sp" />30 31   <TextView32     android:id="@+id/list_coupe_txt2"33     android:layout_width="wrap_content"34     android:layout_height="wrap_content"35     android:layout_alignParentLeft="true"36     android:layout_below="@+id/list_name_txt2"37     android:singleLine="true"38     android:text="网上预定入住可享返现优惠"39     android:textColor="@android:color/holo_red_dark"40     android:textSize="14sp" />41 42 43   <ImageView44     android:id="@+id/list_icon_img2"45     android:layout_width="80dp"46     android:layout_height="80dp"47     android:layout_alignParentTop="true"48     android:layout_toLeftOf="@+id/list_distance2_txt"49     android:src='/images/loading.gif' data-original="@drawable/ic_launcher" />50 51 </RelativeLayout>

 1 <??> 2 <LinearLayout ="http://schemas.android.com/apk/res/android" 3   android:layout_width="match_parent" 4   android:layout_height="match_parent" 5   android:orientation="vertical" > 6  7   <com.scxh.slider.library.SliderLayout 8     android:id="@+id/sliderlayout" 9     android:layout_width="match_parent"10     android:layout_height="150dp" />11 12 </LinearLayout>

 1 <??> 2 <LinearLayout ="http://schemas.android.com/apk/res/android" 3   android:layout_width="match_parent" 4   android:layout_height="wrap_content" 5   android:orientation="horizontal"  6   android:background="@drawable/title_log"> 7  8   <ImageView 9     android:id="@+id/fanhui"10     android:layout_width="30dp"11     android:layout_height="30dp"12     android:layout_gravity="center"13     android:src='/images/loading.gif' data-original="@drawable/btn_back" />14 15   <TextView16     android:layout_width="wrap_content"17     android:layout_height="wrap_content"18     android:layout_gravity="center"19     android:text="  我的关注"20     android:textSize="25sp" />21 22 </LinearLayout>

 1 <??> 2 <LinearLayout ="http://schemas.android.com/apk/res/android" 3   ="http://schemas.android.com/tools" 4   android:layout_width="match_parent" 5   android:layout_height="match_parent" 6   android:orientation="vertical" 7   tools:context="com.lixu.testjsonall.MainActivity" > 8  9   <include layout="@layout/title_layout" />10 11   <TextView12     android:layout_width="match_parent"13     android:layout_height="match_parent"14     android:background="#00C853"15     android:gravity="center"16     android:text="我是体育新闻界面"17     android:textColor="#B71C1C"18     android:textSize="30sp" />19 20 </LinearLayout>

 1 <??> 2 <LinearLayout ="http://schemas.android.com/apk/res/android" 3   android:layout_width="match_parent" 4   android:layout_height="match_parent" 5   android:orientation="vertical" > 6  7   <include layout="@layout/title_layout" /> 8  9   <TextView10     android:layout_width="match_parent"11     android:layout_height="match_parent"12     android:background="#f44336"13     android:gravity="center"14     android:text="我是娱乐新闻界面"15     android:textColor="#03A9F4"16     android:textSize="30sp" />17 18 </LinearLayout>

运行效果图:

模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

 




原标题:模拟QQ侧滑控件 实现三种界面切换效果(知识点:回调机制,解析网络json数据,fragment用法等)。

关键词:JS

JS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

RoHS:https://www.goluckyvip.com/tag/11179.html
卖玩具:https://www.goluckyvip.com/tag/1118.html
VP评论:https://www.goluckyvip.com/tag/11181.html
侵权事件:https://www.goluckyvip.com/tag/11182.html
德国电商:https://www.goluckyvip.com/tag/11183.html
营销渠道:https://www.goluckyvip.com/tag/11184.html
深圳有没有比较好玩的景点 深圳有没有比较好玩的景点推荐一下:https://www.vstour.cn/a/366175.html
长治婚庆女司仪和主持人:https://www.vstour.cn/a/366176.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流