关于横向菜单和viewpage实现效果

Posted sdfkjg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于横向菜单和viewpage实现效果相关的知识,希望对你有一定的参考价值。

MainActivity

  1 package zhanghaijiao.bawei.com.yuekao_moni;
  2 
  3 import android.graphics.Color;
  4 import android.support.v4.app.Fragment;
  5 import android.support.v4.app.FragmentManager;
  6 import android.support.v4.app.FragmentPagerAdapter;
  7 import android.support.v4.app.FragmentStatePagerAdapter;
  8 import android.support.v4.view.ViewPager;
  9 import android.support.v7.app.AppCompatActivity;
 10 import android.os.Bundle;
 11 import android.view.View;
 12 import android.widget.HorizontalScrollView;
 13 import android.widget.LinearLayout;
 14 import android.widget.TextView;
 15 import android.widget.Toast;
 16 
 17 import java.util.ArrayList;
 18 import java.util.List;
 19 
 20 public class MainActivity extends AppCompatActivity {
 21 
 22     private HorizontalScrollView hsv;
 23     private LinearLayout linMenu;
 24     private ViewPager viewPager;
 25 
 26     //存放菜单TextView组件
 27     private List<TextView>  menuLists=new ArrayList<>();
 28 
 29     private List<String> menuText=new ArrayList<>();
 30     private List<String> tabsType=new ArrayList<>();
 31 
 32 
 33     @Override
 34     protected void onCreate(Bundle savedInstanceState) {
 35         super.onCreate(savedInstanceState);
 36         setContentView(R.layout.activity_main);
 37 
 38         hsv = findViewById(R.id.hsv);
 39         linMenu = findViewById(R.id.lin_menu);
 40         viewPager = findViewById(R.id.vp);
 41 
 42         //初使化数据
 43         initData();
 44 
 45         //初使化横向滑动菜单
 46         initMenu();
 47 
 48         //设置viewpager的适配器
 49         MyPagerAdapter adapter=new MyPagerAdapter(getSupportFragmentManager());
 50         viewPager.setAdapter(adapter);
 51 
 52         viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
 53             @Override
 54             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 55 
 56             }
 57 
 58             @Override
 59             public void onPageSelected(int position) {
 60                 //设置选中的菜单,改变文本颜色
 61                 setSelectedMenu(position);
 62                 //设置滚动
 63                 setScrollMenu(position);
 64 
 65 
 66             }
 67 
 68             @Override
 69             public void onPageScrollStateChanged(int state) {
 70 
 71             }
 72         });
 73 
 74         viewPager.setOffscreenPageLimit(menuText.size());
 75 
 76     }
 77 
 78     /**
 79      * 设置横向滑动菜单 滚动到 指定的菜单 项
 80      * @param index
 81      */
 82     private void setScrollMenu(int index){
 83         //得到组件
 84         TextView tvMenu=menuLists.get(index);
 85         float tx = tvMenu.getX();//得到x坐标
 86         //scrollTo(x,y):滚动  y-代表垂直方向的滚动  x-代表水平方向的滚动
 87         hsv.scrollTo((int)tx,0);
 88     }
 89 
 90     private void initData() {
 91         menuText.add("头条");
 92         menuText.add("社会");
 93         menuText.add("国内");
 94         menuText.add("国际");
 95         menuText.add("娱乐");
 96         menuText.add("体育");
 97         menuText.add("军事");
 98         menuText.add("科技");
 99         menuText.add("财经");
100         menuText.add("时尚");
101 
102         tabsType.add("top");
103         tabsType.add("shehui");
104         tabsType.add("guonei");
105         tabsType.add("guoji");
106         tabsType.add("yule");
107         tabsType.add("tiyu");
108         tabsType.add("junshi");
109         tabsType.add("keji");
110         tabsType.add("caijing");
111         tabsType.add("shishang");
112     }
113 
114     private void initMenu() {
115         //将TextView组件 添加到  linMenu 组件中
116         for (int i = 0; i < menuText.size(); i++) {
117             //创建菜单 TextView
118             TextView textView = new TextView(this);
119             textView.setText(menuText.get(i));
120 
121             if (i == 0) {
122                 textView.setTextColor(Color.RED);//设置字体颜色是红色
123             } else {
124                 textView.setTextColor(Color.BLACK);//设置字体颜色是黑色
125             }
126             //设置标签,用来记录它是第几个菜单
127             textView.setTag(i);
128 
129             //添加点击事件
130             textView.setOnClickListener(new View.OnClickListener() {
131                 @Override
132                 public void onClick(View view) {
133                     //viewpager切换到不同的页面
134                     viewPager.setCurrentItem(Integer.parseInt(view.getTag() + ""));
135                     //设置颜色
136                     setSelectedMenu(Integer.parseInt(view.getTag() + ""));
137                 }
138             });
139 
140             LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
141             params.setMargins(0, 5, 8, 0);//设置菜单之间的间隔
142 
143             //进行添加 addView
144             linMenu.addView(textView, params);
145             //添加到集合中
146             menuLists.add(textView);
147         }
148     }
149 
150     /**
151      * 将所有的菜单遍历一遍,设置选中的菜单字体颜色为红色,其余是黑色
152      * @param menuIndex
153      */
154     private void setSelectedMenu(int menuIndex){//menuIndex:当前选中菜单的下标
155         for(int i=0;i<menuLists.size();i++){
156             if(i==menuIndex){
157                 menuLists.get(i).setTextColor(Color.RED);//选中的颜色
158             }else {
159                 menuLists.get(i).setTextColor(Color.BLACK);
160 
161             }
162         }
163     }
164 
165 
166     class MyPagerAdapter extends FragmentPagerAdapter {
167         public MyPagerAdapter(FragmentManager fm) {
168                 super(fm);
169             }
170 
171             //用来返回每个页面
172             @Override
173             public Fragment getItem(int position) {//position:页面的下标
174                 RecommendFr fr=new RecommendFr();
175                 Bundle bundle=new Bundle();
176                 bundle.putString("tt",tabsType.get(position));
177                 fr.setArguments(bundle);
178                 Toast.makeText(MainActivity.this,tabsType.get(position)+"--"+position,Toast.LENGTH_SHORT).show();
179                 return fr;
180             }
181 
182             //返回页面的数量
183             @Override
184             public int getCount() {
185                 return menuText.size();
186             }
187         }
188 }

activity_main

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:app="http://schemas.android.com/apk/res-auto"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     >
 8 
 9     <!--横向菜单  只能有一个子孩子 -->
10     <HorizontalScrollView
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:id="@+id/hsv">
14         <LinearLayout
15             android:layout_width="match_parent"
16             android:layout_height="40dp"
17             android:orientation="horizontal"
18             android:id="@+id/lin_menu">
19 
20         </LinearLayout>
21 
22     </HorizontalScrollView>
23 
24     <!--viewPager实现页面的滑动-->
25     <android.support.v4.view.ViewPager
26         android:layout_width="match_parent"
27         android:layout_height="match_parent"
28         android:id="@+id/vp"
29         android:layout_below="@id/hsv"></android.support.v4.view.ViewPager>
30 
31 
32 
33 </RelativeLayout>

MyPagerAdapter

  1 package zhanghaijiao.bawei.com.yuekao_moni.adapter;
  2 
  3 import android.content.Context;
  4 import android.graphics.Bitmap;
  5 import android.view.View;
  6 import android.view.ViewGroup;
  7 import android.widget.BaseAdapter;
  8 import android.widget.ImageView;
  9 import android.widget.TextView;
 10 
 11 import com.nostra13.universalimageloader.core.DisplayImageOptions;
 12 import com.nostra13.universalimageloader.core.ImageLoader;
 13 import com.nostra13.universalimageloader.core.assist.ImageScaleType;
 14 
 15 import java.util.List;
 16 
 17 import zhanghaijiao.bawei.com.yuekao_moni.R;
 18 import zhanghaijiao.bawei.com.yuekao_moni.bean.ResultData;
 19 
 20 
 21 /**
 22  * Created by jane on 2018/2/27.
 23  */
 24 
 25 public class MyLvAdapter extends BaseAdapter {
 26 
 27 
 28     private Context context;
 29     private  List<ResultData.ResultBean.DataBean> results;
 30 
 31     private final int ONE=0;
 32     private final int TWO=1;
 33     private final int THREE=2;
 34 
 35     private DisplayImageOptions options;
 36 
 37     public MyLvAdapter(Context context, List<ResultData.ResultBean.DataBean> results) {
 38         this.context = context;
 39         this.results = results;
 40         options = new DisplayImageOptions.Builder()
 41                 .cacheInMemory(true)//使用内存缓存
 42                 .cacheOnDisk(true)//使用磁盘缓存
 43                 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
 44                 .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
 45                 // .displayer(new RoundedBitmapDisplayer(50))//设置圆角
 46                 .build();
 47     }
 48 
 49     @Override
 50     public int getViewTypeCount() {
 51         return 3;
 52     }
 53 
 54     @Override
 55     public int getItemViewType(int position) {
 56         //得到以下三个图片url
 57         String s=results.get(position).getThumbnail_pic_s();
 58         String s02=results.get(position).getThumbnail_pic_s02();
 59         String s03=results.get(position).getThumbnail_pic_s03();
 60 
 61         if(s!=null && s02==null && s03==null){
 62             return ONE;
 63         }else if(s==null && s02!=null && s03!=null){
 64             return TWO;
 65         }else if(s!=null && s02!=null && s03!=null){
 66             return THREE;
 67         }else {
 68             return ONE;
 69         }
 70 
 71     }
 72 
 73     @Override
 74     public int getCount() {
 75         return results.size();
 76     }
 77 
 78     @Override
 79     public Object getItem(int i) {
 80         return null;
 81     }
 82 
 83     @Override
 84     public long getItemId(int i) {
 85         return 0;
 86     }
 87 
 88     @Override
 89     public View getView(int i, View view, ViewGroup viewGroup) {
 90         int type = getItemViewType(i);
 91         if(type==ONE){
 92             ViewHolder1 viewHolder1 = null;
 93             if (view==null){
 94                 view= View.inflate(context, R.layout.one_img,null);
 95                 viewHolder1 = new ViewHolder1();
 96                 viewHolder1.img1 = view.findViewById(R.id.img1);
 97                 viewHolder1.title1 = view.findViewById(R.id.tv_title);
 98                 view.setTag(viewHolder1);
 99             }else{
100                 viewHolder1= (ViewHolder1) view.getTag();
101             }
102             viewHolder1.title1.setText(results.get(i).getTitle());
103             ImageLoader.getInstance().displayImage(results.get(i).getThumbnail_pic_s(), viewHolder1.img1, options);
104             return view;
105 
106         }else if(type==TWO){
107             ViewHolder2 viewHolder2 = null;
108             if (view==null){
109                 view= View.inflate(context,R.layout.two_img,null);
110                 viewHolder2 = new ViewHolder2();
111                 viewHolder2.img1 = view.findViewById(R.id.img1);
112                 viewHolder2.img2 = view.findViewById(R.id.img2);
113                 viewHolder2.title1 = view.findViewById(R.id.tv_title);
114                 view.setTag(viewHolder2);
115             }else{
116                 viewHolder2= (ViewHolder2) view.getTag();
117             }
118             viewHolder2.title1.setText(results.get(i).getTitle());
119             ImageLoader.getInstance().displayImage(results.get(i).getThumbnail_pic_s(), viewHolder2.img1, options);
120             ImageLoader.getInstance().displayImage(results.get(i).getThumbnail_pic_s02(), viewHolder2.img2, options);
121             return view;
122         }else if(type==THREE){
123             ViewHolder3 viewHolder3 = null;
124             if (view==null){
125                 view= View.inflate(context,R.layout.three_img,null);
126                 viewHolder3 = new ViewHolder3();
127                 viewHolder3.img1 = view.findViewById(R.id.img1);
128                 viewHolder3.img2 = view.findViewById(R.id.img2);
129                 viewHolder3.img3 = view.findViewById(R.id.img3);
130                 viewHolder3.title1 = view.findViewById(R.id.tv_title);
131                 view.setTag(viewHolder3);
132             }else{
133                 viewHolder3= (ViewHolder3) view.getTag();
134             }
135             viewHolder3.title1.setText(results.get(i).getTitle());
136             ImageLoader.getInstance().displayImage(results.get(i).getThumbnail_pic_s(), viewHolder3.img1, options);
137             ImageLoader.getInstance().displayImage(results.get(i).getThumbnail_pic_s02(), viewHolder3.img2, options);
138             ImageLoader.getInstance().displayImage(results.get(i).getThumbnail_pic_s03(), viewHolder3.img2, options);
139             return view;
140         }else {
141             return null;
142         }
143     }
144 
145 
146     class ViewHolder1{
147         TextView title1;
148         ImageView img1;
149     }
150     class ViewHolder2{
151         TextView title1;
152         ImageView img1;
153         ImageView img2;
154     }
155     class ViewHolder3{
156         TextView title1;
157         ImageView img1;
158         ImageView img2;
159         ImageView img3;
160     }
161 }

MyApp

 1 package zhanghaijiao.bawei.com.yuekao_moni;
 2 
 3 import android.app.Application;
 4 import android.os.Environment;
 5 
 6 import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
 7 import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
 8 import com.nostra13.universalimageloader.core.ImageLoader;
 9 import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
10 
11 import java.io.File;
12 
13 /**
14  * Created by Administrator on 2018/2/22 0022.
15  */
16 
17 public class MyApp extends Application {
18     @Override
19     public void onCreate() {
20         super.onCreate();
21         File cachefile = new File(Environment.getExternalStorageDirectory().getPath()+"/idm");
22         ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
23                 .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽
24                 .threadPoolSize(2)//线程池的数量
25                 .threadPriority(4)
26                 .memoryCacheSize(30*1024*1024)//设置内存缓存区大小
27                 .diskCacheSize(30*1024*1024)//设置sd卡缓存区大小
28                 .diskCache(new UnlimitedDiscCache(cachefile))//自定义缓存目录
29                 .writeDebugLogs()//打印日志内容
30                 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理
31                 .build();
32         ImageLoader.getInstance().init(configuration);
33     }
34 }

RecommendFr

  1 package zhanghaijiao.bawei.com.yuekao_moni;
  2 
  3 import android.os.Bundle;
  4 import android.os.Handler;
  5 import android.os.Message;
  6 import android.support.annotation.Nullable;
  7 import android.support.v4.app.Fragment;
  8 import android.util.Log;
  9 import android.view.LayoutInflater;
 10 import android.view.View;
 11 import android.view.ViewGroup;
 12 import android.widget.ListView;
 13 import android.widget.Toast;
 14 
 15 import com.google.gson.Gson;
 16 import com.google.gson.reflect.TypeToken;
 17 
 18 import java.io.BufferedReader;
 19 import java.io.IOException;
 20 import java.io.InputStream;
 21 import java.io.InputStreamReader;
 22 import java.lang.reflect.Type;
 23 import java.net.HttpURLConnection;
 24 import java.net.URL;
 25 import java.util.ArrayList;
 26 import java.util.List;
 27 
 28 import zhanghaijiao.bawei.com.yuekao_moni.adapter.MyLvAdapter;
 29 import zhanghaijiao.bawei.com.yuekao_moni.bean.ResultData;
 30 import zhanghaijiao.bawei.com.yuekao_moni.utils.MyTask;
 31 import zhanghaijiao.bawei.com.yuekao_moni.utils.NetStateUtil;
 32 
 33 
 34 /**
 35  * Created by jane on 2018/3/1.
 36  */
 37 
 38 public class RecommendFr extends Fragment {
 39 
 40     private String urlpath="";
 41     private ListView listView;
 42     private MyLvAdapter adapter;
 43 
 44     private Handler myHandler=new Handler(){
 45         @Override
 46         public void handleMessage(Message msg) {
 47 
 48 
 49             //设置适配器,进行显示
 50             List<ResultData.ResultBean.DataBean> data =(List<ResultData.ResultBean.DataBean>) msg.obj;
 51             //设置适配器
 52             MyLvAdapter adapter=new MyLvAdapter(getActivity(),data);
 53             listView.setAdapter(adapter);
 54 
 55 
 56         }
 57     };
 58 
 59     @Nullable
 60     @Override
 61     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
 62         View v=inflater.inflate(R.layout.recomend,container,false);
 63         listView = v.findViewById(R.id.lv);
 64 
 65         //接收参数并拼接字符串
 66         Bundle arguments = getArguments();
 67         String str=arguments.getString("tt");
 68         urlpath="http://v.juhe.cn/toutiao/index?type="+str+"&key=597b4f9dcb50e051fd725a9ec54d6653";
 69 
 70         return v;
 71     }
 72 
 73     @Override
 74     public void onActivityCreated(@Nullable Bundle savedInstanceState) {
 75         super.onActivityCreated(savedInstanceState);
 76 
 77         //请求数据
 78         requestNetData();
 79     }
 80 
 81     private void requestNetData() {
 82 
 83         if(NetStateUtil.isConn(getActivity())){
 84             //进行网络请求
 85             new Thread(){
 86                 @Override
 87                 public void run() {
 88                     getData();
 89                 }
 90             }.start();
 91 
 92         }else {
 93             NetStateUtil.showNoNetWorkDlg(getActivity());
 94 
 95         }
 96 
 97 
 98 
 99 
100     }
101 
102     private void getData() {
103 
104         try {
105             URL url=new URL(urlpath);
106             HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
107             urlConnection.setRequestMethod("GET");
108             urlConnection.setConnectTimeout(5000);
109             urlConnection.setReadTimeout(5000);
110 
111             int code=urlConnection.getResponseCode();
112             if(code==200){
113                 //获取数据
114                 InputStream inputStream = urlConnection.getInputStream();
115                 String jsonData=inputstreamToString(inputStream);
116 
117                 //进行解析
118                 Gson gson=new Gson();
119                 ResultData rdata=gson.fromJson(jsonData, ResultData.class);
120 
121                 //给主线程发送消息
122                 Message msg=Message.obtain();
123                 msg.obj=rdata.getResult().getData();
124                 myHandler.sendMessage(msg);
125             }
126 
127 
128 
129 
130         } catch (Exception e) {
131             e.printStackTrace();
132         }
133 
134 
135     }
136     public  String inputstreamToString(InputStream stream){
137         StringBuilder builder=new StringBuilder();
138 
139         try {
140             BufferedReader reader=new BufferedReader(new InputStreamReader(stream));
141             String str;
142             while ((str=reader.readLine())!=null){
143                 builder.append(str);
144             }
145         } catch (IOException e) {
146             e.printStackTrace();
147         }
148 
149         return  builder.toString();
150 
151     }
152 
153 
154 }

ResultData

....

MyTask

 1 package zhanghaijiao.bawei.com.yuekao_moni.utils;
 2 
 3 import android.os.AsyncTask;
 4 
 5 import java.io.BufferedReader;
 6 import java.io.InputStream;
 7 import java.io.InputStreamReader;
 8 import java.net.HttpURLConnection;
 9 import java.net.URL;
10 
11 /**
12  * Created by jane on 2018/2/28.
13  */
14 
15 public class MyTask extends AsyncTask<String,Void,String> {
16 
17     //2.声明接口变量
18     private  ICallBacks iCallBacks;
19 
20     //3.定义带参构造方法
21     public MyTask(ICallBacks iCallBacks) {
22         this.iCallBacks = iCallBacks;
23     }
24 
25     @Override
26     protected String doInBackground(String... strings) {
27         String str="";
28         try {
29             URL url = new URL(strings[0]);
30             HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
31             urlConnection.setRequestMethod("GET");
32             urlConnection.setConnectTimeout(5000);
33             urlConnection.setReadTimeout(5000);
34             int responseCode = urlConnection.getResponseCode();
35             if (responseCode==200){
36                 InputStream inputStream = urlConnection.getInputStream();
37                 str=toJson(inputStream);
38             }
39         } catch (Exception e) {
40             e.printStackTrace();
41         }
42         return str;
43     }
44 
45     @Override
46     protected void onPostExecute(String s) {
47         super.onPostExecute(s);
48         //4.调用接口的方法
49         iCallBacks.getJsonData(s);
50 
51     }
52 
53 
54     //1.定义一个内部接口
55     public interface  ICallBacks{
56         //得到json串
57         void getJsonData(String jsonstr);
58     }
59 
60     private String toJson(InputStream inputStream) {
61         StringBuilder builder = new StringBuilder();
62         String string;
63         InputStreamReader in = new InputStreamReader(inputStream);
64         BufferedReader reader = new BufferedReader(in);
65         try {
66             while ((string=reader.readLine())!=null){
67                 builder.append(string);
68             }
69         } catch (Exception e) {
70             e.printStackTrace();
71         }
72         return builder.toString();
73     }
74 }

NetStateUtil

 1 package zhanghaijiao.bawei.com.yuekao_moni.utils;
 2 
 3 import android.app.AlertDialog;
 4 import android.content.Context;
 5 import android.content.DialogInterface;
 6 import android.content.Intent;
 7 import android.net.ConnectivityManager;
 8 import android.net.NetworkInfo;
 9 
10 import zhanghaijiao.bawei.com.yuekao_moni.R;
11 
12 
13 /**
14  * 得到网络状态的工具类
15  * Created by e531 on 2017/10/16.
16  */
17 public class NetStateUtil {
18 
19     /*
20  * 判断网络连接是否已开
21  * true 已打开  false 未打开
22  * */
23     public static boolean isConn(Context context){
24         boolean bisConnFlag=false;
25         ConnectivityManager conManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
26         NetworkInfo network = conManager.getActiveNetworkInfo();
27         if(network!=null){
28             bisConnFlag=conManager.getActiveNetworkInfo().isAvailable();
29         }
30         return bisConnFlag;
31     }
32 
33     /**
34      * 当判断当前手机没有网络时选择是否打开网络设置
35      * @param context
36      */
37     public static void showNoNetWorkDlg(final Context context) {
38         AlertDialog.Builder builder = new AlertDialog.Builder(context);
39         builder.setIcon(R.mipmap.ic_launcher)         //
40                 .setTitle(R.string.app_name)            //
41                 .setMessage("当前无网络").setPositiveButton("设置", new DialogInterface.OnClickListener() {
42 
43             @Override
44             public void onClick(DialogInterface dialog, int which) {
45                 // 跳转到系统的网络设置界面
46                 Intent intent = null;
47                 // 先判断当前系统版本
48                 if(android.os.Build.VERSION.SDK_INT > 10){  // 3.0以上
49                     intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
50                 }else{
51                     intent = new Intent();
52                     intent.setClassName("com.android.settings", "com.android.settings.WirelessSettings");
53                 }
54                 context.startActivity(intent);
55 
56             }
57         }).setNegativeButton("知道了", null).show();
58     }
59 }

one—img

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <TextView
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:id="@+id/tv_title"/>
10     <ImageView
11         android:layout_width="80dp"
12         android:layout_height="80dp"
13         android:id="@+id/img1"
14         android:layout_below="@id/tv_title"/>
15 
16 </RelativeLayout>

two—img

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <TextView
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:id="@+id/tv_title"/>
10     <LinearLayout
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:orientation="horizontal"
14         android:layout_below="@id/tv_title">
15         <ImageView
16             android:layout_width="80dp"
17             android:layout_height="80dp"
18             android:id="@+id/img1"/>
19         <ImageView
20             android:layout_width="80dp"
21             android:layout_height="80dp"
22             android:id="@+id/img2"/>
23 
24     </LinearLayout>
25 
26 
27 </RelativeLayout>

three——img

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <RelativeLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <TextView
 7         android:layout_width="wrap_content"
 8         android:layout_height="wrap_content"
 9         android:id="@+id/tv_title"/>
10     <LinearLayout
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:orientation="horizontal"
14         android:layout_below="@id/tv_title">
15         <ImageView
16             android:layout_width="80dp"
17             android:layout_height="80dp"
18             android:id="@+id/img1"/>
19         <ImageView
20             android:layout_width="80dp"
21             android:layout_height="80dp"
22             android:id="@+id/img2"/>
23         <ImageView
24             android:layout_width="80dp"
25             android:layout_height="80dp"
26             android:id="@+id/img3"/>
27     </LinearLayout>
28 
29 
30 </RelativeLayout>

recumend

 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 
 6     <ListView
 7         android:layout_width="match_parent"
 8         android:layout_height="match_parent"
 9         android:id="@+id/lv"></ListView>
10 
11 </RelativeLayout>

权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

以上是关于关于横向菜单和viewpage实现效果的主要内容,如果未能解决你的问题,请参考以下文章

Android导航菜单横向左右滑动并和下方的控件实现联动

ViewPager+GridView实现横向滑动 仿大众点评

【求助】SlidingMenu 左右滑动菜单与viewpage冲突问题

从ViewPager嵌套RecyclerView再嵌套RecyclerView看安卓事件分发机制

替换 Viewpager 中的片段 [重复]

Android自定义顶部栏及侧滑菜单和fragment+viewpag滑动切换的实现