HorizontalScrollView和ViewPager的使用

来源:互联网 发布:东方财富软件使用 编辑:程序博客网 时间:2024/06/08 15:56
1.MainActivity 类import android.graphics.Color;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;class MainActivity extends AppCompatActivity implements View.OnClickListener {    private HorizontalScrollView hsv;    private ViewPager vp;    private LinearLayout container_id;    private int position;    private List<String> titleList;    private MyPagerAdapter adapter;    private List<Fragment> fragmentList;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        hsv = (HorizontalScrollView) findViewById(R.id.hsv);        vp = (ViewPager) findViewById(R.id.vp);        container_id = (LinearLayout) findViewById(R.id.container_id);        initData();        addTitleAndFragment();        adapter = new MyPagerAdapter(getSupportFragmentManager(), fragmentList);        vp.setAdapter(adapter);        /**         * 监听ViewPager事件         */        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                // 选中切换变色                clickChangeColor(position);                // 计算控件要滑动的距离                // 共有多少margin                int margins = 20 * position;                int totalWidth = 0;                for (int j = 0; j < position; j++) {                    TextView tView = (TextView) container_id.getChildAt(j);                    int width = tView.getWidth();                    totalWidth += width;                }                // hsv计算滑动的位置                hsv.scrollTo((totalWidth + margins), 0);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    // 1. 向LinearLayout里面添加数据    // 2. 向ViewPager里面添加Fragment    private void addTitleAndFragment() {        for (int i = 0; i < titleList.size(); i++) {            TextView tex = new TextView(this);            tex.setText(titleList.get(i));            tex.setTextSize(20);            if (i == 0) {                tex.setTextColor(Color.RED);            } else {                tex.setTextColor(Color.BLACK);            }            tex.setOnClickListener(this);            tex.setId(i + 1000);            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,                    ViewGroup.LayoutParams.WRAP_CONTENT);            layoutParams.setMargins(15, 8, 15, 8);            tex.setLayoutParams(layoutParams);            container_id.addView(tex);            ContentFragment contentFragment = new ContentFragment();            fragmentList.add(contentFragment);        }    }    //设置tetle 标题    private void initData() {        fragmentList = new ArrayList<>();        titleList = new ArrayList<>();        String[] srt = {"热点", "科技", "文化", "中国", "视频", "微头条", "军事", "游戏", "直播", "养殖", "风景", "大海", "制度", "古董", "女性"};        for (int i = 0; i < 15; i++) {            titleList.add(srt[i]);        }    }    //设置字体变色    private void clickChangeColor(int position) {        for (int i = 0; i < titleList.size(); i++) {            TextView txtview = (TextView) container_id.getChildAt(i);            if (position == i) {                txtview.setTextColor(Color.RED);            } else {                txtview.setTextColor(Color.BLACK);            }        }    }    @Override    public void onClick(View view) {        int id = view.getId();        position = id - 1000;        vp.setCurrentItem(position);        clickChangeColor(position);    }}
1.MainActivity的布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <HorizontalScrollView        android:id="@+id/hsv"        android:layout_width="match_parent"        android:layout_height="55dp"        android:scrollbars="none">        <LinearLayout            android:id="@+id/container_id"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal"></LinearLayout>    </HorizontalScrollView>    <android.support.v4.view.ViewPager        android:id="@+id/vp"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v4.view.ViewPager></LinearLayout>
2.fragment类
import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ListView;import com.google.gson.Gson;import org.xutils.common.Callback;import org.xutils.http.RequestParams;import org.xutils.x;import java.util.ArrayList;import java.util.List;public class ContentFragment extends Fragment {    private ListView list_view;    private List<Bean.DataBean> list=new ArrayList<>();    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        return inflater.inflate(R.layout.fragment_loyout,container,false);    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        getDataFragment();    }    public void getDataFragment() {        String url="http://api.expoon.com/AppNews/getNewsList/type/1/p/1";        RequestParams params=new RequestParams();        params.setUri(url);        x.http().get(params, new Callback.CommonCallback<String>() {            @Override            public void onSuccess(String result) {                if (result != null){                    Gson gson=new Gson();                    Bean bean = gson.fromJson(result, Bean.class);                    List<Bean.DataBean> data = bean.getData();                    list_view = (ListView) getView().findViewById(R.id.list_view);                    MyListAdapter adapter=new MyListAdapter(getContext(),data);                    list_view.setAdapter(adapter);                }            }            @Override            public void onError(Throwable ex, boolean isOnCallback) {            }            @Override            public void onCancelled(CancelledException cex) {            }            @Override            public void onFinished() {            }        });    }}
2.fragment布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <ListView        android:id="@+id/list_view"        android:layout_width="match_parent"        android:layout_height="match_parent"></ListView></LinearLayout>
3.baseadapter适配器
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;import org.xutils.x;import java.util.List;public class MyListAdapter extends BaseAdapter {    private Context context;    private List<Bean.DataBean> list;    public MyListAdapter(Context context, List<Bean.DataBean> list) {        this.context = context;        this.list = list;    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int i) {        return list.get(i);    }    @Override    public long getItemId(int i) {        return i;    }    @Override    public View getView(int i, View view, ViewGroup viewGroup) {        MyViewHolder holder;        if (view==null){            holder=new MyViewHolder();            view = LayoutInflater.from(context).inflate(R.layout.itme_layout, null);            holder.tvtetle= (TextView) view.findViewById(R.id.tvtetle);            holder.tvContent= (TextView) view.findViewById(R.id.tvContent);            holder.ivIcon= (ImageView) view.findViewById(R.id.ivIcon);            view.setTag(holder);        }else{            holder= (MyViewHolder) view.getTag();        }        Bean.DataBean bean = list.get(i);        holder.tvtetle.setText(bean.getNews_title());        holder.tvContent.setText(bean.getNews_summary());        x.image().bind(holder.ivIcon,bean.getPic_url());        return view;    }    static  class MyViewHolder{        private TextView tvtetle,tvContent;        private ImageView ivIcon;    }}
3.baseadapter布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal">    <ImageView        android:id="@+id/ivIcon"        android:layout_width="100dp"        android:layout_height="100dp"        />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="100dp"        android:orientation="vertical">        <TextView            android:id="@+id/tvtetle"            android:layout_width="match_parent"            android:layout_height="40dp"            android:textSize="20sp" />        <TextView            android:id="@+id/tvContent"            android:layout_width="match_parent"            android:layout_height="60dp"            android:maxLines="2"            android:textSize="14sp" />    </LinearLayout></LinearLayout>

4.fragmentpageradapter适配
import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import java.util.List; public class MyPagerAdapter extends FragmentPagerAdapter {    private List<Fragment> fragmentList;    public MyPagerAdapter(FragmentManager fm,List<Fragment>  fragmentList) {        super(fm);        this.fragmentList=fragmentList;    }    @Override    public Fragment getItem(int position) {        return fragmentList.get(position);    }    @Override    public int getCount() {        return fragmentList.size();    }}

//需要的依赖
compile 'org.xutils:xutils:3.5.0'compile 'com.google.code.gson:gson:2.8.1'
//权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>