Horizontal+异步+pullTorefresh+viewPager(本地图片)+每页都有数据

//main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="bbb.bwie.com.heqi.MainActivity"

    >
    <HorizontalScrollView
        android:id="@+id/hs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        >
        <LinearLayout
            android:id="@+id/ll"
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            >

        </LinearLayout>

    </HorizontalScrollView>

    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v4.view.ViewPager>

</LinearLayout>


//pullTorefresh布局
<?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">

    <com.handmark.pulltorefresh.library.PullToRefreshListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/pt"
        >
    </com.handmark.pulltorefresh.library.PullToRefreshListView>

</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">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/img"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/name"
        />

</LinearLayout>


//viewPagwer布局
<?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"
    >

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/vp"
        ></android.support.v4.view.ViewPager>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ll"
        android:orientation="horizontal"
        ></LinearLayout>
</LinearLayout>




<?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">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/img2"
        />
</LinearLayout>



import android.graphics.Color;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private HorizontalScrollView hs;
    private LinearLayout ll;
    private ViewPager vp;
    private String[] titles;
    private ArrayList<TextView> list;
    List<Fragment> list2=new ArrayList<Fragment>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        hs =(HorizontalScrollView)findViewById(R.id.hs);
        ll =(LinearLayout)findViewById(R.id.ll);
        vp =(ViewPager)findViewById(R.id.vp);
        titles = new String[]{"福利", "Android", "iOS", "休息视频", "拓展资源", "前端", "all"};
        data();
        list =new ArrayList<TextView>();
        for (int i=0;i<titles.length;i++){
            TextView view = new TextView(this);
            view.setText(titles[i]);
            view.setTextSize(20);
            if(i==0){
                view.setTextColor(Color.RED);
            }else{
                view.setTextColor(Color.BLACK);
            }
            view.setOnClickListener(this);
            view.setId(i+10000);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            params.setMargins(20,10,20,10);
            ll.addView(view,params);
            list.add(view);
        }
        vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int position) {

                return list2.get(position);
            }

            @Override
            public int getCount() {
                return list2.size();
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                return super.instantiateItem(container, position);
            }
        });
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

                for (int i=0;i<list.size();i++){
                    if(position==i){
                        list.get(i).setTextColor(Color.RED);
                    }else{
                        list.get(i).setTextColor(Color.BLACK);
                    }
                }
                TextView textView = list.get(position);
                int width = textView.getWidth();//获取宽度
                //计算该滑到哪里
                hs.scrollTo((width+20)*position,0);//viewpager滑动时与滚动控件想配合一起滑动
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });




    }
    private void data() {

        fragment2 f1= new fragment2(titles[0]);
        fragment2 f2 = new fragment2(titles[1]);
        fragment2 f3 = new fragment2(titles[2]);
        fragment2 f4 = new fragment2(titles[3]);
        fragment2 f5 = new fragment2(titles[4]);
        fragment2 f6 = new fragment2(titles[5]);
        fragment2 f7 = new fragment2(titles[6]);
        list2.add(f1);
        list2.add(f2);
        list2.add(f3);
        list2.add(f4);
        list2.add(f5);
        list2.add(f6);
        list2.add(f7);

    }

    @Override
    public void onClick(View view) {
        int id = view.getId();
        vp.setCurrentItem(id-10000);
    }
}



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.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by HQ on 2017/9/19.
 */

public class fragment2 extends Fragment {

    private String a;
    private ViewPager vp;
    private LinearLayout ll;
    List<Vpbean> vplist=new ArrayList<Vpbean>();


    public fragment2(String b) {
        a="http://gank.io/api/data/"+ URLEncoder.encode(b)+"/10/"+i;
    }

    private View view;
    List<User> list = new ArrayList<User>();
    private mydata mydata;
    int i = 1;

    private URL url;
    private PullToRefreshListView pt;

    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            int i = vp.getCurrentItem() + 1;
            vp.setCurrentItem(i);
            handler.sendEmptyMessageDelayed(0,2000);
        }
    };

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment, container, false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //获取控件
        pt = (PullToRefreshListView) view.findViewById(R.id.pt);
        //添加头布局
        View vvp = View.inflate(getActivity(), R.layout.vp, null);
        vp =(ViewPager)vvp.findViewById(R.id.vp);
        ll =(LinearLayout)vvp.findViewById(R.id.ll);
        ListView listView = pt.getRefreshableView();
        listView.addHeaderView(vvp);
        pt.setMode(PullToRefreshBase.Mode.BOTH);
        //PullToRefreshListView适配器
        mydata = new mydata();
        pt.setAdapter(mydata);
        //路径可变
        new Myasynctask().execute(a);
        //PullToRefreshListView监听事件
        pt.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                ll.removeAllViews();
                list.clear();
                i = 1;
                new Myasynctask().execute("http://gank.io/api/data/Android/10/1");

            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                i++;
                new Myasynctask().execute("http://gank.io/api/data/Android/10/"+i);
            }
        });
        vplist.clear();
        vplist.add(new Vpbean(R.mipmap.a));
        vplist.add(new Vpbean(R.mipmap.b));
        vplist.add(new Vpbean(R.mipmap.c));
        vplist.add(new Vpbean(R.mipmap.d));

    }
    class vpmydata extends 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 view = View.inflate(getActivity(),R.layout.vptextview,null);
            ImageView img=(ImageView)view.findViewById(R.id.img2);
            img.setImageResource(vplist.get(position%vplist.size()).vpimg);
            container.addView(view);
            return view;
        }
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);

        }


    }

    class Myasynctask extends AsyncTask<String, Void, String> {
        private StringBuilder builder;
        private ArrayList<ImageView> imagelist;
        private ImageView img;

        @Override
        protected String doInBackground(String... strings) {
            try {
                url = new URL(strings[0]);
                URLConnection connection = url.openConnection();
                InputStream stream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
                builder = new StringBuilder();
                String tem = "";
                while ((tem = reader.readLine()) != null) {
                    builder.append(tem);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return builder.toString();

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            Bean bean = gson.fromJson(s, Bean.class);
            List<Bean.ResultsBean> results = bean.getResults();
            for (int i = 0; i < results.size(); i++) {
                String desc = results.get(i).getDesc();
                list.add(new User(desc,"http://img.gank.io/9f51b7bc-73d3-4ce4-bd59-c61cb0c64325"));
            }
            mydata.notifyDataSetChanged();
            pt.onRefreshComplete();
            //加点(先不做)
            nodata();
            vp.setAdapter(new vpmydata());
            handler.sendEmptyMessageDelayed(0,2000);
            //ViewPager监听事件
            vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {

                    for (int i=0;i<imagelist.size();i++){
                        if(position%vplist.size()==i){
                            imagelist.get(position%vplist.size()).setImageResource(R.drawable.dot_focuable);
                        }else{
                            imagelist.get(i).setImageResource(R.drawable.dot_normal);
                        }
                    }
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

        }

        private void nodata() {

            ll.removeAllViews();
            imagelist =new ArrayList<ImageView>();
            if(imagelist !=null){
                imagelist.clear();
            }
            for (int i=0;i<vplist.size();i++){
                img = new ImageView(getActivity());
                if(i==vp.getCurrentItem()){
                    img.setImageResource(R.drawable.dot_focuable);
                }else{
                    img.setImageResource(R.drawable.dot_normal);
                }
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(20, 20);
                params.setMargins(10,0,10,0);
                imagelist.add(img);
                ll.addView(img,params);
            }
        }
    }

    //PullToRefreshListView适配器
    class mydata 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.textview, null);
                vh.name = (TextView) view.findViewById(R.id.name);
                vh.img = (ImageView) view.findViewById(R.id.img);
                view.setTag(vh);
            } else {
                vh = (ViewHolder) view.getTag();
            }
            vh.name.setText(list.get(i).getName());
            ImageLoader.getInstance().displayImage(list.get(i).getUrl(), vh.img);
            return view;
        }

        class ViewHolder {
            TextView name;
            ImageView img;
        }
    }
}




Bean


User用于pullTorefresh



Vpbean
用于viewPager



import android.app.Application;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

/**
 * Created by HQ on 2017/9/19.
 */

public class Appi extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(build);
    }
}



 
 
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Android 圆点导航和引导页,可以按照以下步骤进行: 1.创建引导页布局文件:创建一个包含多个页面的引导页布局文件,可以使用 ViewPager 和 Fragment 来实现。 2.创建圆点导航布局文件:创建一个包含多个圆点的导航布局文件,在每个圆点被点击时,ViewPager 将滚动到相应的页面。 3.定义 ViewPager 和 Fragment:定义 ViewPager 和 Fragment,并将它们与引导页布局文件关联起来。 4.设置圆点导航:在圆点导航布局文件中,设置每个圆点的样式和点击事件,以便在用户点击圆点时,ViewPager 可以滚动到相应的页面。 5.添加适配器:创建一个适配器来管理 ViewPager 中的 Fragment,以便在用户滑动引导页时,可以更新圆点导航。 6.设置引导页:在应用程序的启动活动中,将引导页布局文件和圆点导航布局文件关联起来,并将适配器添加到 ViewPager 中。 7.处理最后一页:在最后一页的布局文件中,添加一个按钮或其他控件,以便用户可以进入应用程序的主界面。 示例代码如下: 引导页布局文件: ``` <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> 圆点导航布局文件: <LinearLayout android:id="@+id/dots_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="16dp" /> 定义 ViewPager 和 Fragment: public class GuideActivity extends AppCompatActivity { private ViewPager viewPager; private int[] layoutIds = {R.layout.layout_guide_step1, R.layout.layout_guide_step2, R.layout.layout_guide_step3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); viewPager = findViewById(R.id.view_pager); GuideAdapter adapter = new GuideAdapter(this, layoutIds); viewPager.setAdapter(adapter); } } public class GuideAdapter extends PagerAdapter { private Context context; private int[] layoutIds; public GuideAdapter(Context context, int[] layoutIds) { this.context = context; this.layoutIds = layoutIds; } @Override public Object instantiateItem(ViewGroup container, int position) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(layoutIds[position], container, false); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public int getCount() { return layoutIds.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } 设置圆点导航: public class GuideActivity extends AppCompatActivity { private ViewPager viewPager; private LinearLayout dotsLayout; private int[] layoutIds = {R.layout.layout_guide_step1, R.layout.layout_guide_step2, R.layout.layout_guide_step3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); viewPager = findViewById(R.id.view_pager); dotsLayout = findViewById(R.id.dots_layout); GuideAdapter adapter = new GuideAdapter(this, layoutIds); viewPager.setAdapter(adapter); addDots(); } private void addDots() { TextView[] dots = new TextView[layoutIds.length]; for (int i = 0; i < dots.length; i++) { dots[i] = new TextView(this); dots[i].setText(Html.fromHtml("•")); dots[i].setTextSize(18); dots[i].setTextColor(ContextCompat.getColor(this, R.color.colorAccent)); dotsLayout.addView(dots[i]); } dots[0].setTextColor(ContextCompat.getColor(this, R.color.colorPrimary)); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { for (int i = 0; i < dots.length; i++) { dots[i].setTextColor(ContextCompat.getColor(GuideActivity.this, R.color.colorAccent)); } dots[position].setTextColor(ContextCompat.getColor(GuideActivity.this, R.color.colorPrimary)); } @Override public void onPageScrollStateChanged(int state) { } }); } } 处理最后一页: 在最后一页的布局文件中,添加一个按钮或其他控件,以便用户可以进入应用程序的主界面。 ``` <Button android:id="@+id/btn_enter_app" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="进入应用" android:layout_centerInParent="true" /> ``` 在 GuideActivity 中,为按钮添加点击事件: public class GuideActivity extends AppCompatActivity { private ViewPager viewPager; private LinearLayout dotsLayout; private int[] layoutIds = {R.layout.layout_guide_step1, R.layout.layout_guide_step2, R.layout.layout_guide_step3}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); viewPager = findViewById(R.id.view_pager); dotsLayout = findViewById(R.id.dots_layout); GuideAdapter adapter = new GuideAdapter(this, layoutIds); viewPager.setAdapter(adapter); addDots(); Button btnEnterApp = findViewById(R.id.btn_enter_app); btnEnterApp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 进入应用程序的主界面 } }); } } ``` 这样就可以实现 Android 圆点导航和引导页了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值