首先要明确的是,如果添加了handler 和radioGroup 其实就是一个轮播的实现了。所以说这个是实现轮播的准备。
0:布局里面添加ViewPager,记住这个是v4包里面的,所以要写去路径
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/main_viewpage" > </android.support.v4.view.ViewPager> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/main_viewpage" android:layout_marginBottom="30dp" /> </RelativeLayout>
1:然后写一个ViewPager的adapter,这个adapter 要继承的是PagerAdapter,记住这里是PageAdapter,《以后如果遇到了Fragment 相关的需要用到Fragment PagerAdapter或者FragmentStatePagerAdapter》
默认的是要重写两个方法,其实还要重写另外两个方法,如果不重写的话就会报错了。这两个方法就是instantiateItem 和destroyItem
-------------------参考-------------------
实现下面的方法:
public int getCount()
public boolean isViewFromObject(View view, Object object) return view==object;
还必须要重写这两个方法:
public Object instantiateItem(ViewGroup container, int position)
public void destroyItem(ViewGroup container, int position, Object object) {
// !!!
// 必须重写的方法, 不重写抛异常; 并且这两个方法,不允许调用 super的同名方法
细节:
------isViewFromObject(View view, Object object) :
这个方法,代表检查一下 view 参数代表的对象,是否是利用 object 来创建的,也就是view 是否 和 object 有关系;
这个方法的应用场景,主要就是 Fragment 与 Fragment 的view显示;
------Object instantiateItem(ViewGroup container, int position)
/**
* 当ViewPager 需要滑动到指定位置的时候, 那么这个方法instantiateItem会被调用;
* 这个方法内部需要进行控件的添加操作;
* 返回值用于判断view与返回值之间的关系;=
* 可以认为这个方法就是 BaseAdapter 中的 getView,
------getPageTitle
/**
* 获取指定位置页的标题;
* @param position
* @return
*/
@Override
public CharSequence getPageTitle(int position) {
return "Page " + position;
}
-------------------参考结束-------------------
package tech.androidstudio.viewpagerradiogroupdemo.adapter; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; /** * Created by Kodulf on 2016/3/9. */ public class ViewPagerPicAdapter extends PagerAdapter { List<SimpleDraweeView> list; Context context; public ViewPagerPicAdapter(List<SimpleDraweeView> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { // return super.instantiateItem(container, position); container.addView(list.get(position)); return list.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) { // super.destroyItem(container, position, object); container.removeView((View)object); } }
2:然后在MainActivity 里面
package tech.androidstudio.viewpagerradiogroupdemo; import android.net.Uri; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.ViewGroup; import android.widget.RadioButton; import android.widget.RadioGroup; import com.facebook.drawee.drawable.ScalingUtils; import com.facebook.drawee.view.SimpleDraweeView; import java.util.ArrayList; import tech.androidstudio.viewpagerradiogroupdemo.adapter.ViewPagerPicAdapter; public class MainActivity extends AppCompatActivity { private ViewPager mViewPage; private ArrayList<String> mListUrl; private RadioGroup mRadioGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mViewPage = (ViewPager) findViewById(R.id.main_viewpage); mListUrl = new ArrayList<String>(); mListUrl.add("http://fdfs.xmcdn.com/group16/M08/F1/13/wKgDbFal40bR7Uc6AAH3JpWhLiQ015_android_large.jpg"); mListUrl.add("http://fdfs.xmcdn.com/group10/M07/F0/14/wKgDaVal9ZLTP5q1AAFIJeYaktQ092_android_large.jpg"); mListUrl.add("http://fdfs.xmcdn.com/group12/M07/E8/35/wKgDXFacqEfReClFAAFvbZHe_mU331_android_large.jpg"); mListUrl.add("http://fdfs.xmcdn.com/group9/M05/EE/15/wKgDZlagtF_yH9YXAAEyq6YSxDo657_android_large.jpg"); mListUrl.add("http://fdfs.xmcdn.com/group11/M07/FC/B4/wKgDbValyzzy0fBpAAMdsEAuI-Q295_android_large.jpg"); mListUrl.add("http://fdfs.xmcdn.com/group9/M01/EF/02/wKgDZlaiCqbTzvIzAAH_l7MCT-k503_android_large.jpg"); ArrayList<SimpleDraweeView> list = new ArrayList<SimpleDraweeView>(); //获取屏幕的高度,取其三分之一 int height = getWindowManager().getDefaultDisplay().getHeight(); ViewGroup.LayoutParams layoutParams = mViewPage.getLayoutParams(); int viewPageHeight = height/3; //设置ViewPager的高度为整个屏幕的3分之一 layoutParams.height=viewPageHeight; for(int i=0;i<mListUrl.size();i++){ SimpleDraweeView simpleDraweeView = new SimpleDraweeView(this); simpleDraweeView.setImageURI(Uri.parse(mListUrl.get(i))); simpleDraweeView.setAspectRatio(1.5f);//设置宽高比 simpleDraweeView.setMaxHeight(viewPageHeight); simpleDraweeView.getHierarchy().setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER); list.add(simpleDraweeView); } ViewPagerPicAdapter adapter = new ViewPagerPicAdapter(list,this); mViewPage.setAdapter(adapter); mRadioGroup = (RadioGroup) findViewById(R.id.main_radiogroup); for(int i=0;i<mListUrl.size();i++){ RadioButton radioButton = new RadioButton(this); mRadioGroup.addView(radioButton); } } }