ViewPagerAdapter
public class ViewPagerAdapter extends PagerAdapter {
private String[] image;
private Context context;
private Handler handler;
public ViewPagerAdapter(String[] image, Context context,Handler handler) {
this.image = image;
this.context = context;
this.handler = handler;
}
@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) {
ImageView imageView = new ImageView(context);
ImageLoader.getInstance().displayImage(image[position%image.length],imageView, ImageLoadler.getOptions());
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
//按下
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);
break;
//移动
case MotionEvent.ACTION_MOVE:
handler.removeCallbacksAndMessages(null);
break;
//抬起
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(0,2000);
break;
//结束
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(0,2000);
break;
}
return true;
}
});
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
Fragment_one
public class Fragment_one extends Fragment {
private String[] imags = {
"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530147896&di=a108779183cfcf652d8b0e575326e3f1&imgtype=jpg&er=1&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fzhidao%2Fpic%2Fitem%2F0bd162d9f2d3572ca715ccac8613632763d0c3cf.jpg",
"https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1109914389,2791689143&fm=27&gp=0.jpg",
"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530148203&di=f76108132220d420f20e670007cbfc7c&imgtype=jpg&er=1&src=http%3A%2F%2Ff10.topitme.com%2Fo042%2F10042332873d775e7b.jpg",
"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1529553529652&di=b620d433ed2c93c296e1bf5434594399&imgtype=0&src=http%3A%2F%2Fgame.ahgame.com%2Fuploads%2Fallimg%2F171120%2F1-1G120102133.jpg",
"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1529553594735&di=4133e5bb6f4221acbc673d0518e34ed6&imgtype=jpg&src=http%3A%2F%2Fimg1.imgtn.bdimg.com%2Fit%2Fu%3D1706558701%2C1505343713%26fm%3D214%26gp%3D0.jpg"
};
private String path = "http://gank.io/api/data/";
private ViewPager viewPager;
private LinearLayout linearLayout;
private List<ImageView> imag_list = new ArrayList<>();
private HttpUtils httpUtils;
private ViewPagerAdapter adapter;
private boolean mash;
private RelativeLayout relativeLayout;
private int i;//接受当前的页
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//接受当前的位置
i = viewPager.getCurrentItem();
//改变页的选中
viewPager.setCurrentItem(i+1);
handler.sendEmptyMessageDelayed(1,2000);
}
};
//单例得到Fragment
public static Fragment_one getInstance(String string){
Fragment_one fragment_one = new Fragment_one();
//接受传来的值
Bundle bundle = new Bundle();
bundle.putString("string",string);
fragment_one.setArguments(bundle);
return fragment_one;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.i("TAG","onCreateView");
View view = inflater.inflate(R.layout.fragmentone,container,false);
viewPager = view.findViewById(R.id.viewpager2);
linearLayout = view.findViewById(R.id.ll);
relativeLayout = view.findViewById(R.id.f_relativelayout);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//得到网络的网络的状态
mash = ConnecitivtUtils.getInstance().isMash(getActivity());
Bundle arguments = getArguments();
//取值赋值
if(arguments.get("string").equals("头条")){
//请求数据
//判断当前网络
if(mash){
initview();
adapter = new ViewPagerAdapter(imags,getActivity(),handler);
viewPager.setAdapter(adapter);
//开始轮播
handler.sendEmptyMessageDelayed(1,2000);
//滑动选择对应的图片
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
for (int i =0; i < imag_list.size();i++){
if(i==position%imag_list.size()){
imag_list.get(i).setSelected(true);
}else{
imag_list.get(i).setSelected(false);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}else{
//从缓存中去图片
}
}
}
//创建小圆点
private void initview() {
for (int i =0; i < imags.length;i++){
//创建图片
ImageView imageView = new ImageView(getActivity());
//设置选择器
imageView.setImageResource(R.drawable.imageselector);
linearLayout.addView(imageView);
//添加到集合
imag_list.add(imageView);
}
//设置默认选中的远点
imag_list.get(0).setSelected(true);
}
//请求不同的数据
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.i("TAG","setUserVisibleHint");
Bundle arguments = getArguments();
//取值赋值
if(isVisibleToUser && arguments.get("string").equals("头条")){
//请求数据
//判断当前网络
if(mash){
getData("Android/10/1");
}else{
//从缓存中去图片
}
}else if(isVisibleToUser && arguments.get("string").equals("娱乐")){
relativeLayout.setVisibility(View.GONE);
getData("福利/10/1");
Log.i("TAG","娱乐");
}else if(isVisibleToUser && arguments.get("string").equals("科技")){
Log.i("TAG","科技");
relativeLayout.setVisibility(View.GONE);
getData("iOS/10/1");
}
}
//请求数据的方法 参数传入分类
public void getData(String s){
httpUtils= HttpUtils.getInstance();
String url = path+s;
httpUtils.getdata(url);
httpUtils.setHttpListener(new HttpUtils.HttpListener() {
@Override
public void getjsondata(String json) {
//请求数据
//展示数据
}
});
}
}
ImageLoadler
public class ImageLoadler extends Application{
private Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
//初始化
initImageLoader();
}
private void initImageLoader() {
String path = getExternalStorageDirectory()+"Image";
File cacheDir = new File(path); //缓存文件夹路径ir = new File(path); //缓存文件夹路径
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大长宽
.diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
.threadPoolSize(3) // default 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiskCache(cacheDir))//自定义缓存路径
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.writeDebugLogs() // 打印debug log
.build(); //开始构建
ImageLoader.getInstance().init(config);
}
//
public static DisplayImageOptions getOptions(){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.mipmap.ic_launcher) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.mipmap.ic_launcher) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.mipmap.ic_launcher) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(false) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(0) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
.displayer(new RoundedBitmapDisplayer(300)) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.handler(new Handler()) // default
.build();
return options;
}
}
MainActivity
public class MainActivity extends AppCompatActivity {
private String[] s = {"头条", "娱乐", "科技", "信息", "八卦", "北京", "上海", "天津","重庆", "大大燕网"};
private HorizontalScrollView hs;
private LinearLayout linearLayout;
private ViewPager viewPager;
private List<TextView> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源ID
hs = (HorizontalScrollView) findViewById(R.id.hs);
linearLayout = (LinearLayout) findViewById(R.id.linearlayout);
viewPager = (ViewPager) findViewById(R.id.viewpager);
//初始化集合
list = new ArrayList<>();
//动态添加分类
for (int i = 0;i <s.length;i++){
//创建TextView
final TextView textView = new TextView(this);
textView.setText(s[i]);
textView.setTextSize(20);
textView.setId(i+1000);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = v.getId();
viewPager.setCurrentItem(id-1000);
}
});
//设置默认选中的颜色
if(i==0){
textView.setTextColor(Color.RED);
}else{
textView.setTextColor(Color.BLACK);
}
//设置textview的宽高 以及间距
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
layoutParams.setMargins(50,10,50,10);
linearLayout.addView(textView,layoutParams);
//将TextView存入List集合中
list.add(textView);
}
//设置适配器
viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public int getCount() {
return list.size();
}
@Override
public Fragment getItem(int position) {
Log.i("TAG",position+"");
return Fragment_one.getInstance(list.get(position).getText().toString());
}
});
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i = 0;i <list.size();i++){
if(position==i){
list.get(i).setTextColor(Color.RED);
}else{
list.get(i).setTextColor(Color.BLACK);
}
//滑动ViewPager改变TextView的距离
//得到当前选中的Textview
TextView textView = list.get(position);
//width是每次滑动的距离
int width = textView.getWidth()+10;
//设置当前滚动的位置 X Y
hs.scrollTo(width*position,0);
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
ConnecitivtUtils
public class ConnecitivtUtils {
private static ConnecitivtUtils connecitivtUtils;
private boolean isConnectivit;//接受是否有网络的状态值
public static ConnecitivtUtils getInstance() {
connecitivtUtils = new ConnecitivtUtils();
return connecitivtUtils;
}
//用来判断网络
public boolean isMash(Context context){
//得到系统的服务
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//得到网络
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
//判断是否有网络
if(networkInfo != null && networkInfo.isConnected()){
isConnectivit = true;
}else{
isConnectivit = false;
}
return isConnectivit;
}
}
HttpUtils
public class HttpUtils {
private static HttpUtils httpUtils;
private HttpListener httpListener;
public static HttpUtils getInstance(){
if(httpUtils == null){
httpUtils = new HttpUtils();
}
return httpUtils;
}
//网络获得请求数据
public void getdata(String url){
Myasynctack asynctack = new Myasynctack();
asynctack.execute(url);
}
class Myasynctack extends AsyncTask<String,Void,String>{
@Override
protected String doInBackground(String... params) {
try {
HttpClient client = new DefaultHttpClient();
//设置请求方式
HttpGet get = new HttpGet(params[0]);
HttpResponse response = client.execute(get);
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 200){
//得到请求到的数据
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
httpListener.getjsondata(s);
}
}
//定义接口
public interface HttpListener{
void getjsondata(String json);
}
//向外提供当前的接口
public void setHttpListener(HttpListener httpListener){
this.httpListener = httpListener;
}
}