主布局: activity_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="com.example.ms.myapplication.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="160dp">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/ll_dot"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_alignParentBottom="true"
android:layout_margin="10dp"
android:gravity="center"
android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
主程序:MainActivity
public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
private LinearLayout ll_dot;
private ViewPager viewPager;
private ViewPagerAdapter mAdapter;
private List<Fragment> mData;
private List<String> links;
private List<String> images;
private MyThread myThread;
private Handler handler;
private int MSG_HANDLER = 0;
int thisposition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mData = new ArrayList<>();
images = new ArrayList<>();
links = new ArrayList<>();
ll_dot = (LinearLayout) findViewById(R.id.ll_dot);
viewPager = (ViewPager) findViewById(R.id.viewpager);
mAdapter = new ViewPagerAdapter(getSupportFragmentManager(), mData);
viewPager.setAdapter(mAdapter);
viewPager.addOnPageChangeListener(this);
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_HANDLER) {
if (thisposition == (mData.size() - 1)) {
thisposition = 0;
viewPager.setCurrentItem(thisposition);
} else {
viewPager.setCurrentItem(thisposition + 1);
}
}
}
};
myThread = new MyThread();
myThread.start();
loadData();
}
private void loadData() {
String url = "";
RequestParams params = new RequestParams(url);
x.http().get(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
try {
JSONObject jsonObject = new JSONObject(result);
String code = jsonObject.getString("code");
if (code.equals("0000")) {
JSONArray jsonArray = jsonObject.getJSONArray("data");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject json = jsonArray.getJSONObject(i);
String image = json.getString("image");
images.add(image);
String link = json.getString("linkUrl");
links.add(link);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
for (int i = 0; i < images.size(); i++) {
ImageView view = new ImageView(MainActivity.this);
view.setImageResource(R.drawable.bg_dot_selector);
view.setPadding(0, 18, 0, 18);
ll_dot.addView(view);
}
for (int i = 0; i < images.size() * 100; i++) {
NewFragment newFragment = new NewFragment();
Bundle bundle = new Bundle();
bundle.putString("images", images.get(i % images.size()));
bundle.putString("links", links.get(i % images.size()));
newFragment.setArguments(bundle);
mData.add(newFragment);
}
mAdapter.notifyDataSetChanged();
viewPager.setCurrentItem(images.size() * 50,false);
}
});
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == mData.size()) {
thisposition = 0;
}
for (int i = 0; i < images.size(); i++) {
if (i == position % images.size()) {
ll_dot.getChildAt(i).setSelected(true);
} else {
ll_dot.getChildAt(i).setSelected(false);
}
}
}
@Override
public void onPageSelected(int position) {
thisposition = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
private class MyThread extends Thread {
@Override
public void run() {
super.run();
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendEmptyMessage(MSG_HANDLER);
}
}
}
}
适配器:ViewPagerAdapter
public class ViewPagerAdapter extends FragmentPagerAdapter{
private List<Fragment> mData;
public ViewPagerAdapter(FragmentManager fm, List<Fragment> mData) {
super(fm);
this.mData = mData;
}
@Override
public Fragment getItem(int position) {
return mData.get(position);
}
@Override
public int getCount() {
return mData.size();
}
}
点的选择器:bg_dot_selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_dot_press" android:state_selected="true"/>
<item android:drawable="@drawable/bg_dot_normal" android:state_selected="false"/>
</selector>
bg_dot_press
<layer-list xmlns:android="http://schemas.android.com/apk/res-auto"
xmlns:Android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size
android:height="20dp"
android:width="20dp"/>
<solid android:color="@color/tvGray"/>
<corners android:radius="100dp"/>
</shape>
</item>
</layer-list>