1. 程式人生 > >用java程式碼寫的圖片輪播,方便呼叫

用java程式碼寫的圖片輪播,方便呼叫

package com.sxt.view;


import java.util.List;


import com.sxt.net.img.ImageLoad;


import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;


/**
 * 廣告輪播介面
 * */


public class AdverstView implements ViewPager.OnPageChangeListener{


private Context ctx;
private Bitmap pointN;//預設圖示
private Bitmap pointP;//選中圖示
private List<View> list;//viewpager中顯示資料來源
private int Height = 0;//廣告欄高度
private RelativeLayout mumRelative;//整體廣告欄佈局
private ViewPager vp;//廣告輪播viewpager
private LinearLayout bottemLinear;//底部顯示點容器
private int Index = 0;//viewpager正在顯示介面索引
private boolean TimmerFlag = true;//定時標誌
private boolean ScrollFlag = false;//手指拖動標誌
private ImageLoad load = new ImageLoad();//非同步載入圖片工具類


//初始化介面方法
public void create(Context ctx,Bitmap pointN,
Bitmap pointP,List<View> list,
int Heigh){
this.ctx = ctx;
this.pointN = pointN;
this.pointP = pointP;
this.list = list;
this.Height = Heigh;
initView();
initPager();
}


//初始化控制元件方法
private void initView(){


mumRelative = new RelativeLayout(ctx);
mumRelative.setLayoutParams(
new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.MATCH_PARENT, Height));
vp = new ViewPager(ctx);
vp.setLayoutParams(new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT));
mumRelative.addView(vp);
bottemLinear = new LinearLayout(ctx);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.WRAP_CONTENT,pointN.getHeight());
lp.addRule(RelativeLayout.CENTER_HORIZONTAL);
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
lp.bottomMargin = pointN.getHeight();
bottemLinear.setLayoutParams(lp);
bottemLinear.setOrientation(LinearLayout.HORIZONTAL);
mumRelative.addView(bottemLinear);
//按照viewpager資料來源的數量新增顯示當前頁的點
for(int i = 0;i < list.size();i ++){
ImageView img = new ImageView(ctx);
LinearLayout.LayoutParams imgLp= new LinearLayout.LayoutParams
(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.MATCH_PARENT);
imgLp.leftMargin = 10;
img.setLayoutParams(imgLp);
if(i == 0)
img.setImageBitmap(pointP);
else
img.setImageBitmap(pointN);
img.setId(i);
bottemLinear.addView(img, i);
}
}


//初始化viewpager相關配置
private void initPager(){
vp.setAdapter(new MyAdapter());
vp.setOnPageChangeListener(this);
}


//獲取view方法
public View getView(){
return mumRelative;
}


//viewpager使用介面卡
private class MyAdapter extends PagerAdapter{


@Override
public int getCount() {
return list.size();
}


@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}


@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}


@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView img = (ImageView) list.get(position);
String imgName = (String) img.getTag();
container.addView(img);
load.LoadImg(imgName, img);
return list.get(position);
}


}




@Override
public void onPageScrollStateChanged(int arg0) {


if(arg0 == ViewPager.SCROLL_STATE_IDLE){
ScrollFlag = false;
}else{
ScrollFlag = true;
}


}




@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}




@Override
public void onPageSelected(int arg0) {
Index = arg0;
//切換底部imageview
selectImg();
}


//開啟廣告輪播
public void startTime(){
TimmerFlag = true;
new TimmerThread().start();
}


//關閉廣告輪播
public void stopTime(){
TimmerFlag = false;
}


//根據viewpager顯示的索引切換底部imageview顯示的圖示
private void selectImg(){
for(int i = 0;i < list.size();i ++){
ImageView img =  (ImageView) bottemLinear.getChildAt(i);
if(i == Index){
img.setImageBitmap(pointP);
}else{
img.setImageBitmap(pointN);
}
}
}


//定時執行緒->定時更新廣告顯示介面
class TimmerThread extends Thread{
public void run(){
while(TimmerFlag){
try {
Thread.sleep(3*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(!ScrollFlag)
hand.sendEmptyMessage(0);
}
}
}


//接收定時執行緒傳送訊息handler
Handler hand = new Handler(){
public void handleMessage(android.os.Message msg) {
super.handleMessage(msg);
if(msg.what == 0 && list != null){
//切換介面
Index++;
//滑動到邊界時切換到0
if(Index >= list.size()){
Index = 0;
}
vp.setCurrentItem(Index);
}
};
};


}