HorizontalScrollView横向滑动静态方法

本文介绍了一个使用ViewPager和Fragment实现的安卓应用示例,通过动态添加TextView并结合FragmentPagerAdapter实现了页面间的切换效果及水平滚动视图的同步更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends FragmentActivity implements View.OnClickListener{

    private ViewPager vp;
    private String[] title;

    private ArrayList<TextView> textList;
    LinearLayout llHead;

    private HorizontalScrollView hs;
    private FragmentAdapte adapte;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取控件
        llHead=(LinearLayout)findViewById(R.id.llHead);
        vp=(ViewPager)findViewById(R.id.vp);

        hs=(HorizontalScrollView)findViewById(R.id.hs);
        title = new String[]{"福利", "Android", "ios", "休息视频", "拓展资源", "前段", "all"};

        textList = new ArrayList<>();
        //动态添加textview
        for(int i=0;i<title.length;i++){

            final TextView textView = new TextView(MainActivity.this);
            textView.setText(title[i]);
            textView.setTextSize(20);
            textView.setId(i+1000);
            textView.setOnClickListener(this);

            if(i==0){
                textView.setTextColor(Color.RED);
            }else{
                textView.setTextColor(Color.BLACK);
            }
            //设置参数
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(20,10,20,10);
            //添加view的时候,用参数;
            llHead.addView(textView,layoutParams);
            textList.add(textView);

            adapte = new FragmentAdapte(getSupportFragmentManager());
            vp.setAdapter(adapte);
            //设置监听
            vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                    for (int i = 0; i < textList.size(); i++) {
                        if (position == i) {
                            textList.get(i).setTextColor(Color.RED);
                        } else {
                            textList.get(i).setTextColor(Color.BLACK);
                        }
                    }

                    //让scrollView滑动
                    TextView textView = textList.get(position);
                    //20为margin值;
                    int width = textView.getWidth();
                    hs.scrollTo((width+20)*position,0);

                }

                @Override
                public void onPageSelected(int position) {

                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

        }
    }
    //加载数据

    class FragmentAdapte extends FragmentPagerAdapter{

        public FragmentAdapte(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return MFragment1.getFrag(position);
        }

        @Override
        public int getCount() {
            return textList.size();
        }
    }
    //重写的点击方法
    @Override
    public void onClick(View v) {
        int id = v.getId();
        vp.setCurrentItem(id-1000);
    }
}

fragment
public class MFragment1 extends Fragment implements XListView.IXListViewListener{
    @BindView(R.id.xl)
    com.example.xx.xlist_library.view.XListView xl;
    Unbinder unbinder;
    private View view;
    List<User.ResultsBean> list = new ArrayList<>();
    private MAdapter adapter;

    int b=1;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.f1, container, false);
        initData();
        unbinder = ButterKnife.bind(this, view);
        xl.setPullLoadEnable(true);
        adapter = new MAdapter();
        xl.setXListViewListener(this);


        return view;
    }
    public static Fragment getFrag(int position){
        MFragment1 frag = new MFragment1();
        Bundle bundle = new Bundle();
        bundle.putInt("position",position);
        frag.setArguments(bundle);

        return frag;
    }
    private void initData() {

        new MAsyncTask().execute("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/10/"+b);

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

    }

    @Override
    public void onRefresh() {

        b++;
        initData();
        xl.setAdapter(adapter);
        onLoad();

    }

    @Override
    public void onLoadMore() {

                b++;
                initData();
                adapter.notifyDataSetChanged();
                onLoad();

    }

    class MAsyncTask extends AsyncTask<String,Void,String>{

        @Override
        protected String doInBackground(String... strings) {
            return new NewWorkUtil().getJson(strings[0]);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);

            Gson gson = new Gson();

            User user = gson.fromJson(s, User.class);

            list = user.getResults();

            xl.setAdapter(adapter);
        }
    }

    class MAdapter extends BaseAdapter {

        @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) {
            ViewHolder vh;
            if(view==null){
                vh=new ViewHolder();
                view=View.inflate(getActivity(),R.layout.lv,null);
                vh.img=view.findViewById(R.id.img);
                vh.tv=view.findViewById(R.id.tv);

                view.setTag(vh);
            }else{
                vh= (ViewHolder) view.getTag();
            }
                vh.tv.setText(list.get(i).getType());

            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    //默认机器人
                    .showImageOnLoading(R.mipmap.ic_launcher)
                    .showImageOnFail(R.mipmap.ic_launcher)
                    .bitmapConfig(Bitmap.Config.RGB_565)
                    .build();

            ImageLoader.getInstance().displayImage(list.get(i).getUrl(),vh.img,options);

            return view;
        }

    }

    class ViewHolder{
        TextView tv;
        ImageView img;
    }
    private void onLoad() {
        xl.stopRefresh();
        xl.stopLoadMore();
        xl.setRefreshTime("刚刚");
    }
    @Override
    public void onDestroyView() {

        super.onDestroyView();
        unbinder.unbind();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值