一:在所有工作开始前,我们先准备好布局和资源:两张不同状态的按钮,四张图片
(在布局中需要注意几点:想要radiogroup放在Viewpager下面的话,需要用到
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.com.wechart.Activity.MainActivity" > <RelativeLayout android:layout_width="match_parent" android:layout_height="200dp"> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/main_relativelayout" > </android.support.v4.view.ViewPager> <RadioGroup android:layout_centerInParent="true" android:gravity="center" android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="20dp" android:padding="6dp" android:orientation="horizontal" android:background="#d4d1d1" android:id="@+id/main_radiogroup" > </RadioGroup> </RelativeLayout> </RelativeLayout>
图片资源我就不给了
当然还需要一个为radiobutton背景准备的xml文件
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/btn_img_two" /> <item android:drawable="@drawable/btn_img_one" /> </selector>
二,现在准备工作都准备好了,我们开始其他的,轮播图,还需要一个activity和一个adapter
首先是aticvity:
package com.example.com.wechart.Activity; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.RadioButton; import android.widget.RadioGroup; import com.example.com.wechart.Activity.Adpater.ViewPagerAdapter; import com.example.com.wechart.R; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener { private ViewPager viewPager; private RadioGroup radioGroup; private List<View> imageview_list=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); int[] ids={ R.drawable.inter, R.drawable.learning, R.drawable.major, R.drawable.message }; for (int i=0;i<ids.length;i++) { ImageView imageview=new ImageView(this); imageview.setScaleType(ImageView.ScaleType.CENTER); imageview.setImageBitmap(BitmapFactory.decodeResource(getResources(),ids[i])); imageview_list.add(imageview); RadioButton button=new RadioButton(this); button.setButtonDrawable(R.drawable.button_values); radioGroup.addView(button); } viewPager.addOnPageChangeListener(this); viewPager.setAdapter(new ViewPagerAdapter(imageview_list)); radioGroup.check(0); handle.sendEmptyMessageDelayed(1,3000); } //通过id寻找到控件 private void init() { viewPager= (ViewPager) findViewById(R.id.main_relativelayout); radioGroup= (RadioGroup) findViewById(R.id.main_radiogroup); } // @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { radioGroup.clearCheck(); radioGroup.check(position-1); } @Override public void onPageScrollStateChanged(int state) { }
Handler handle=new Handler() { private int Index; @Override public void handleMessage(Message msg) { super.handleMessage(msg); handle.sendEmptyMessageDelayed(1,3000); if (Index<imageview_list.size()-1) { Index++; } else { Index=0; } viewPager.setCurrentItem(Index); } }; }
然后是adapter:
package com.example.com.wechart.Activity.Adpater; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by 12697 on 2017/3/11. */ public class ViewPagerAdapter extends PagerAdapter { private List<View> imageview_list; public ViewPagerAdapter(List<View> imageview_list) { this.imageview_list=imageview_list; } @Override public int getCount() { return imageview_list==null?0:imageview_list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view=imageview_list.get(position); container.addView(view,0); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { View view=imageview_list.get(position); container.removeView(view); } }
以后写Viewpager时一定要记住,必须重写destroyitem;特别是在与fragment这些一起连用的时候,否则,容易出现卡顿等现象
ok,基本上一个轮播图就这样写完了,有兴趣的可以去学习一下无限轮播,或者自定义轮播图以及radiogroup的一些算法机制