用ViewPager实现:一个图片广告的播放,可自动循环播放,也可手动左右滑动,
布局:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/pointgroup"
android:layout_alignParentBottom="true"
android:layout_marginBottom="15dp"
android:layout_centerHorizontal="true">
</LinearLayout>
</RelativeLayout>
</FrameLayout>
代码:
<pre class="html" name="code"> private ViewPager pager;
private List<ImageView> imgList;//要播放的图片
private List<Bitmap> bitmapList;//从各种地方获取的图片
private LinearLayout pointGroup;//指示点
private ImageView image;
private int index = 0;
boolean isAutoPlay = true; //自动播放,当手指滑动时改为FALSE
<pre class="html" name="code">public void updateViewPager(){
pager = (ViewPager) view.findViewById(R.id.pager);
pointGroup = (LinearLayout) view.findViewById(R.id.pointgroup);
imgList=new ArrayList<ImageView>();//要播放的图片
try {
bitmapList=FileOperator.GetImageAD(PlatformAttribute.getFilePrefix()+ "imagead");
} catch (FalconmeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i = 0; i < bitmapList.size(); i++) {
// 初始化图片资源
image = new ImageView(getActivity());
image.setScaleType(ScaleType.FIT_XY);
LinearLayout.LayoutParams imgParam = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
imgParam.height=220;//设置图片的高度
image.setLayoutParams(imgParam);
Bitmap bitmap= bitmapList.get(i);
image.setImageBitmap(bitmap);
imgList.add(image);//将得到的图片加到图片
// 添加指示点
ImageView point = new ImageView(getActivity());
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.rightMargin=5;//设置指示点之间的距离
params.height=10;
params.width=10;
point.setLayoutParams(params);
//如果显示的是第一页,则将第一个指示点点亮,其他的指示点为默认状态
if (i == 0) {
point.setImageResource(R.drawable.white_off);
}
else{
point.setImageResource(R.drawable.white_on);
}
pointGroup.addView(point);//将指示点加到显示的LinearLayout
}
pager.setAdapter(new MyPagerAdapter());
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
//改变指示点的状态
for(int i=0;i<imgList.size();i++){
if(i==position){
ImageView imgPoint=(ImageView)pointGroup.getChildAt(position);
imgPoint.setImageResource(R.drawable.white_off);
break;
}
}
//设置没有在当前页面的指示点
for(int i=0;i<imgList.size();i++){
ImageView imgPoint=(ImageView)pointGroup.getChildAt(i);
if(i==position){
continue;
}
else{
imgPoint.setImageResource(R.drawable.white_on);
}
}
index=position;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
//arg0 ==1的时辰默示正在滑动,arg0==2的时辰默示滑动完毕了,arg0==0的时辰默示什么都没做。
switch (arg0) {
case 1:
isAutoPlay = false;
break;
case 2:
isAutoPlay = true;
break;
case 0:
isAutoPlay = true;
break;
}
}
});
}
private class MyPagerAdapter extends PagerAdapter {
public int getCount() {
return imgList.size();
}
public Object instantiateItem(ViewGroup container, int position) {
container.addView(imgList.get(position));
return imgList.get(position);
}
public boolean isViewFromObject(View view, Object object) {
if(view == object){
return true;
}else{
return false;
}
}
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
object = null;
}
}
public class TimeThread extends Thread {
@Override
public void run () {
do {
try {
Thread.sleep(1000*3);
if(isAutoPlay){
Message msg = new Message();
msg.what = 1;
mHandler.sendMessage(msg);
}
}catch (InterruptedException e) {
e.printStackTrace();
}
} while(true);
}
}
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@SuppressLint("SimpleDateFormat")
@Override
public void handleMessage (Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
index+=1;
if(index==imgList.size()){
index=0;
}
pager.setCurrentItem(index,false);
break;
default:
break;
}
}
};
}