輪播圖小圓點可點選
private ViewPager viewPager;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what == 0){
//viewPager顯示下一頁
viewPager.setCurrentItem(viewPager.getCurrentItem() +1);
//再次傳送延時訊息
handler.sendEmptyMessageDelayed(0,2000);
}
}
};
private LinearLayout linearLayout;
private List<ImageView> images;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.view_pager);
linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
//獲取輪播圖的資料
getDataFromNet();
}
private void getDataFromNet() {
AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void... voids) {
String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=5&page=1";
try {
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setReadTimeout(5000);
connection.setConnectTimeout(5000);
int responseCode = connection.getResponseCode();
if (responseCode == 200){
InputStream inputStream = connection.getInputStream();
String json = streamToString(inputStream,"utf-8");
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
//列印以下資料看看是否獲取到
Log.i("----",s);
if (s != null){
Gson gson = new Gson();
DataDataBean dataDataBean = gson.fromJson(s, DataDataBean.class);
List<DataDataBean.DataBean> list = dataDataBean.getData();
//給viewPager設定介面卡
MyAdapter myAdapter = new MyAdapter(MainActivity.this, list,handler);
//設定介面卡
viewPager.setAdapter(myAdapter);
//3.根據集合的長度動態新增小圓點...linearLayout
initDoc(list);
//2.手動的可以無限滑動
viewPager.setCurrentItem(list.size()*100000);//設定當前展示中間某個足夠大的位置
handler.sendEmptyMessageDelayed(0,2000);//傳送一個延時的空訊息
//viewPage設定監聽事件
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/**
* 當選中某個頁面的時候,把當前的小圓點背景變成綠色
* @param position
*/
@Override
public void onPageSelected(int position) {
for (int i=0;i<images.size();i++){
if (i == position%images.size()){
images.get(i).setImageResource(R.drawable.shape_01);
}else {
images.get(i).setImageResource(R.drawable.shape_02);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
}
};
asyncTask.execute();
}
/**
* 動態新增小圓點
* @param list
*/
private void initDoc(List<DataDataBean.DataBean> list) {
//1.需要一個集合記錄一下小圓點的imageView控制元件
images = new ArrayList<ImageView>();
//2...linearLayout上面的檢視清空一下再去新增
linearLayout.removeAllViews();
for (int i=0;i<list.size();i++){
ImageView imageView = new ImageView(MainActivity.this);
if (i==0){
imageView.setImageResource(R.drawable.shape_01);
}else {
imageView.setImageResource(R.drawable.shape_02);
}
//新增到集合去
images.add(imageView);
//新增到線性佈局上
//這是佈局引數,,剛開始小圓點之間沒有距離,所以使用java程式碼指定寬度高度,並且指定小圓點之間的距離
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(5,0,5,0);
linearLayout.addView(imageView,params);
}
}
private String streamToString(InputStream inputStream,String charset) {
try {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s = null;
StringBuilder builder = new StringBuilder();
while ((s = bufferedReader.readLine()) != null){
builder.append(s);
}
bufferedReader.close();
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
//viewpager介面卡配置
public class MyAdapter extends PagerAdapter {
Context context;
List<DataDataBean.DataBean> list;
Handler handler;
public MyAdapter(Context context, List<DataDataBean.DataBean> list, Handler handler) {
this.context = context;
this.list = list;
this.handler = handler;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/**
* viewPager具有預載入,預設的前後載入一頁,,,預設的容器裡面最多三頁
* @param container
* @param position
* @return
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
//1.把這個當前展示的檢視新增到容器中...container
ImageView imageView = new ImageView(context);
//..........使圖片平鋪整個imageView控制元件
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//imageLoader載入圖片到這個imageView控制元件上
ImageLoader.getInstance().displayImage(list.get(position %list.size()).getImg(),imageView,ImageLoaderUtil.getDefaultOption());
//給imageView設定觸控的監聽事件
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getAction();//獲取手指的動作
switch (action){
case MotionEvent.ACTION_DOWN://按下的動作...應該取消傳送訊息的操作
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_MOVE://移動的動作
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_CANCEL://取消
//重新發送
handler.sendEmptyMessageDelayed(0,2000);
break;
case MotionEvent.ACTION_UP://擡起的動作
handler.sendEmptyMessageDelayed(0,2000);
break;
}
//返回true表示自己處理觸控事件
return true;
}
});
container.addView(imageView);//新增到容器
//2.把當前展示的檢視返回
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//銷燬檢視
container.removeView((View) object);
}
}