主xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".MainActivity"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="240dp">
<android.support.v4.view.ViewPager
android:id="@+id/main_viewpager"
android:layout_width="match_parent"
android:layout_height="240dp">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="match_parent"
android:layout_height="30dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:gravity="center"
>
</LinearLayout>
</RelativeLayout>
<GridView
android:id="@+id/main_gridview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:numColumns="2"
></GridView>
</LinearLayout>
</LinearLayout>
主activity 界面
public class MainActivity extends AppCompatActivity {
private ViewPager viewpager;
private LinearLayout ll_points;
private List<ImageView> imageview = new ArrayList<>();
private List<ImageView> points = new ArrayList<>();
//使用handler设置自动轮播
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
viewpager.setCurrentItem(viewpager.getCurrentItem() + 1);
handler.sendEmptyMessageDelayed(0, 2000);
}
};
private GridView gridview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化页面
initViews();
//获取网络数据
initDatasForNet();
}
public void initDatasForNet() {
HttpUtils httpUtils = HttpUtils.getHttpUtils();
boolean b = httpUtils.hasNet(MainActivity.this);
//判断是否有网
if (b) {
httpUtils.get(url1);
httpUtils.setHttpListener(new HttpUtils.HttpListener() {
@Override
public void getSuccess(String json) {
//gson解析
Gson gson = new Gson();
NewsBean newsBean = gson.fromJson(json, NewsBean.class);
//设置轮播图
List<NewsBean.DataBean.EssayBean> essay = newsBean.getData().getEssay();
for (int i = 0; i < essay.size(); i++) {
String web_url = essay.get(i).getAuthor().get(0).getWeb_url();
ImageView imageView = new ImageView(MainActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
ImageLoader.getInstance().displayImage(web_url, imageView, MyApp.getOptions());
imageview.add(imageView);
//添加小圆点
ImageView p = new ImageView(MainActivity.this);
p.setImageResource(R.drawable.select);
points.add(p);
//将圆点添加到布局中
ll_points.addView(p);
}
//设置默认圆点选中
points.get(0).setSelected(true);
MyPageAdapter adapter = new MyPageAdapter(imageview);
viewpager.setAdapter(adapter);
handler.sendEmptyMessageDelayed(0,2000);
List<NewsBean.DataBean.SerialBean> beanList = newsBean.getData().getSerial();
//创建gridview的适配器
MyBaseAdapter base = new MyBaseAdapter(MainActivity.this, beanList);
gridview.setAdapter(base);
}
@Override
public void getError(String error) {
}
});
}else{
}
}
//初始化页面
private void initViews() {
viewpager = findViewById(R.id.main_viewpager);
ll_points = findViewById(R.id.ll_points);
gridview = findViewById(R.id.main_gridview);
//设置监听
viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
position = position % imageview.size();
for (int i = 0; i < points.size(); i++) {
if (i == position) {
points.get(i).setSelected(true);
} else {
points.get(i).setSelected(false);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//页面销毁
}
}
MyAdapter 适配器
public class MyBaseAdapter extends BaseAdapter {
private Context context;
private List<NewsBean.DataBean.SerialBean> list;
public MyBaseAdapter(Context context, List<NewsBean.DataBean.SerialBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
convertView=View.inflate(context, R.layout.mybase,null);
holder = new ViewHolder();
holder.img=(ImageView) convertView.findViewById(R.id.my_img);
holder.text=(TextView) convertView.findViewById(R.id.my_text);
convertView.setTag(holder);
}else{
holder=(ViewHolder) convertView.getTag();
}
String pic=list.get(position).getAuthor().getWeb_url();
ImageLoader.getInstance().displayImage(pic,holder.img, MyApp.getOptions());
holder.text.setText(list.get(position).getTitle());
return convertView;
}
class ViewHolder{
ImageView img;
TextView text;
}
}
图片适配器
MyPageAdapter
public class MyPageAdapter
extends PagerAdapter{
private List<
ImageView>
list;
public MyPageAdapter(List<
ImageView> list) {
this.
list = list; }
@Override
public int getCount() {
return Integer.
MAX_VALUE; }
@Override
public boolean isViewFromObject(
@NonNull View view,
@NonNull Object object) {
return view==object; }
@NonNull
@Override
public Object instantiateItem(
@NonNull ViewGroup container,
int position) { position=position%
list.size();
ImageView imageView =
list.get(position); container.addView(imageView);
return imageView; }
@Override
public void destroyItem(
@NonNull ViewGroup container,
int position,
@NonNull Object object) { container.removeView((
ImageView)object); }}
MyGridView GridView
public class
MyGridView
extends GridView{
public MyGridView(Context context) {
super(context); }
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs); }
public MyGridView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr); }
//因为和尺寸相关,所以在onMeasure里面处理,哪里有问题处理那个
@Override
protected void onMeasure(
int widthMeasureSpec,
int heightMeasureSpec) {
int height = MeasureSpec.
makeMeasureSpec(Integer.
MAX_VALUE >>
2, MeasureSpec.
AT_MOST);
super.onMeasure(widthMeasureSpec, height); }}
ConUtils
public class ConUtils {
public static String in(InputStream inputStream)
throws IOException {
InputStreamReader read =
new
InputStreamReader(inputStream); BufferedReader br =
new BufferedReader(read); String s; StringBuffer stringBuffer =
new StringBuffer();
while((s=br.readLine())!=
null){ stringBuffer.append(s); }
return stringBuffer.toString(); }}
HttpUtils
public class HttpUtils {
private HttpListener
httpListener;
private static final int
SUCCESS =
0;
private static final int
ERROR =
1;
@SuppressLint(
"HandlerLeak")
private Handler
handler=
new Handler(){
@Override
public void handleMessage(Message
msg) {
super.handleMessage(
msg);
switch (
msg.
what){
case
SUCCESS: String s= (String)
msg.
obj;
httpListener.getSuccess(s);
break;
case
ERROR: String error= (String)
msg.
obj;
httpListener.getError(error);
break; } } };
//单例模式
private static HttpUtils
httpUtils =
new HttpUtils();
//私有构造方法
private HttpUtils() { }
public static HttpUtils getHttpUtils() {
if (
httpUtils ==
null) {
httpUtils =
new HttpUtils(); }
return
httpUtils; }
//get请求
public void get(
final String url) {
new Thread() {
@Override
public void run() {
try { URL u =
new URL(
url); HttpURLConnection con = (HttpURLConnection) u.openConnection(); con.setConnectTimeout(
5000);
if (con.getResponseCode() ==
200) { InputStream inputStream = con.getInputStream(); String json = ConUtils.
in(inputStream);
//发送消息
Message me =
new Message(); me.
what =
SUCCESS; me.
obj = json;
//发送handler请求
handler.sendMessage(me); } }
catch (Exception e) { e.printStackTrace(); Message m =
new Message(); m.
what =
ERROR; m.
obj = e.getMessage();
//发送handler请求
handler.sendMessage(m); } } }.start(); }
public interface HttpListener{
void getSuccess(String json);
void getError(String error); }
public void setHttpListener(HttpListener httpListener){
this.
httpListener=httpListener; }
//判断 是否有网
public boolean hasNet(Context context){ ConnectivityManager cm= (ConnectivityManager) context.getSystemService(Context.
CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo();
return networkInfo!=
null; }}