这是一个通过json解析网络请求的广告轮播,还有自己写的一个小圆点,会跟着图片一块动,滑动流畅,不会出现无响应的情况,喜欢的可以进来看看,希望能帮到你们。
这是两个依赖包:
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.squareup.okhttp3:okhttp:3.5.0'
下面是配置清单需要配置的权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
下面是xml布局:
<RelativeLayout android:layout_width="match_parent" android:layout_height="240dp"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="240dp"/> <LinearLayout android:id="@+id/mLayou" android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center" android:layout_alignParentBottom="true"></LinearLayout> </RelativeLayout>
主界面:
MainActivity
import android.app.Activity; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; 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.ImageView; import android.widget.LinearLayout; import com.bumptech.glide.Glide; import java.util.ArrayList; public class MainActivity extends Activity implements OkUtils.LoadData { private String path="http://litchiapi.jstv.com/api/getTops?limit=5&column=0&val=F467412B44B421716757A6B2D7635B4A"; private ViewPager mVp; private LinearLayout mLayout; private ArrayList<ImageView>views = new ArrayList<>(); private ArrayList<ImageView>dots = new ArrayList<>(); private int currentIndex = 0; private boolean isTouch = false; private boolean isAuto = true; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == 0){ if(isTouch){ return; } currentIndex++; mVp.setCurrentItem(currentIndex); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); OkUtils utils=new OkUtils(this,this); utils.getRequest(path); thread.start(); } Thread thread = new Thread(new Runnable() { public void run() { while(isAuto){ try { thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(0); } } }); private void initView() { mVp = (ViewPager) findViewById(R.id.viewpager); mLayout = (LinearLayout) findViewById(R.id.mLayou); mVp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { currentIndex = mVp.getCurrentItem(); for(int i=0;i<dots.size();i++){ if(position%dots.size()==i){ dots.get(i).setImageResource(R.mipmap.dian1); }else{ dots.get(i).setImageResource(R.mipmap.dian); } } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { if(state == ViewPager.SCROLL_STATE_IDLE){ isTouch = false; }else{ isTouch = true; } } }); } public void loadData(String json) { JsonUtils utils = new JsonUtils(); JavaBean pzjson = utils.getJson(json); if(pzjson!=null && pzjson.getStatus().equals("ok")){ ArrayList<JavaBean.Paramz.Tops>topses = pzjson.getParamz().getTops(); for(int i=0;i<topses.size();i++){ ImageView imageView = new ImageView(this); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); imageView.setScaleType(ImageView.ScaleType.FIT_XY); Glide.with(this).load("http://litchiapi.jstv.com"+topses.get(i).getPhoto()).into(imageView); views.add(imageView); ImageView dot = new ImageView(this); dot.setLayoutParams(new ViewGroup.LayoutParams(20,20)); dot.setScaleType(ImageView.ScaleType.FIT_XY); dot.setImageResource(R.mipmap.dian); mLayout.addView(dot); dots.add(dot); } dots.get(0).setImageResource(R.mipmap.dian1); } if(views!=null){ MyPagerAdapter adapter = new MyPagerAdapter(); mVp.setAdapter(adapter); } } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { if(views.size()>0){ return Integer.MAX_VALUE; } return 0; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { position %= views.size(); ViewGroup group = (ViewGroup) views.get(position).getParent(); if(group!=null){ group.removeView(views.get(position)); } container.addView(views.get(position)); return views.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { } } }
OkUtils(这个是封装的一个Okhttp的网络请求工具类)
import android.content.Context; import android.net.ConnectivityManager; import java.io.IOException; import java.util.concurrent.TimeUnit; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class OkUtils { private Context context; private OkHttpClient okClient; private LoadData loadData; public OkUtils(Context context,LoadData loadData){ this.context = context; this.loadData = loadData; } public OkHttpClient getOkClient(){ if(okClient==null){ synchronized (this){ if(okClient==null){ okClient = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(5,TimeUnit.SECONDS) .build(); } } } return okClient; } public boolean isConnected(){ boolean flag = false; ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if(manager.getActiveNetworkInfo()!= null){ flag = manager.getActiveNetworkInfo().isConnected(); } return flag; } public void getRequest(String path){ if(isConnected()){ OkHttpClient client = getOkClient(); Request request = new Request.Builder() .url(path) .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { final String str = response.body().string(); if(str!=null){ ((MainActivity)context).runOnUiThread(new Runnable() { @Override public void run() { loadData.loadData(str); } }); } } }); } } public interface LoadData { void loadData(String json); } }
JsonUtils
import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; public class JsonUtils { public JavaBean getJson(String json){ JavaBean json1=new JavaBean(); try { JSONObject object = new JSONObject(json); // Json.setStatus(object.optString("status")); json1.setStatus(object.optString("status")); JavaBean.Paramz paramz = json1.new Paramz(); JSONObject ob1 = object.optJSONObject("paramz"); ArrayList<JavaBean.Paramz.Tops> topses = new ArrayList<>(); JSONArray array = ob1.optJSONArray("tops"); for(int i=0;i<array.length();i++){ JSONObject ob2 = array.optJSONObject(i); int id = ob2.optInt("id"); int oid = ob2.optInt("oid"); String category = ob2.optString("category"); String photo = ob2.optString("photo"); String subject = ob2.optString("subject"); JavaBean.Paramz.Tops tops = paramz.new Tops(id,oid,category,photo,subject); topses.add(tops); } paramz.setTops(topses); json1.setParamz(paramz); } catch (JSONException e) { e.printStackTrace(); } return json1; } }
JavaBean
import java.util.ArrayList; public class JavaBean { private String status; private Paramz paramz; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Paramz getParamz() { return paramz; } public void setParamz(Paramz paramz) { this.paramz = paramz; } public class Paramz{ private ArrayList<Tops> tops; public ArrayList<Tops> getTops() { return tops; } public void setTops(ArrayList<Tops> tops) { this.tops = tops; } public class Tops{ private int id; private int oid; private String category; private String photo; private String subject; public Tops(int id, int oid, String category, String photo, String subject) { this.id = id; this.oid = oid; this.category = category; this.photo = photo; this.subject = subject; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getOid() { return oid; } public void setOid(int oid) { this.oid = oid; } public String getCategory() { return category; } public void setCategory(String category) { this.category = category; } public String getPhoto() { return photo; } public void setPhoto(String photo) { this.photo = photo; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } } } }