您的位置:首页 > 其它

编写轮播图Viewpager

2017-03-11 20:22 85 查看
一:在所有工作开始前,我们先准备好布局和资源:两张不同状态的按钮,四张图片      (在布局中需要注意几点:想要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;@Overridepublic 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;}@Overridepublic int getCount(){return imageview_list==null?0:imageview_list.size();}@Overridepublic boolean isViewFromObject(View view, Object object){return view==object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {View view=imageview_list.get(position);container.addView(view,0);return  view;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object){View view=imageview_list.get(position);container.removeView(view);}}
以后写Viewpager时一定要记住,必须重写destroyitem;特别是在与fragment这些一起连用的时候,否则,容易出现卡顿等现象ok,基本上一个轮播图就这样写完了,有兴趣的可以去学习一下无限轮播,或者自定义轮播图以及radiogroup的一些算法机制
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: