當前位置:首頁 » 安卓系統 » androidviewpager圖片

androidviewpager圖片

發布時間: 2025-02-10 12:53:52

Ⅰ android viewpager如何動態添加頁面

動態創建Adapter即可。ViewPager的數據是通過PageAdapter來裝載的,刷新數據的方法有以下:
1. 調用adapter.notifyDataSetChanged(); 刷新控制項,但是要覆蓋PagerAdapter的getItemPosition方法,並返回 return POSITION_NONE;
2. 利用PagerAdapter的工作機制,就是PagerAdapter的執行順序, PagerAdapter作為ViewPager的適配器,無論ViewPager有多少頁,PagerAdapter在初始化時也只初始化開始的2個View,即調用2次instantiateItem方法。而接下來每當ViewPager滑動時,PagerAdapter都會調用destroyItem方法將距離該頁2個步幅以上的那個View銷毀,以此保證PagerAdapter最多隻管轄3個View,且當前View是3個中的中間一個,如果當前View缺少兩邊的View,那麼就instantiateItem,如里有超過2個步幅的就destroyItem。
3. 每當Adapter調用instantiateItem時,運用View.setTag方法將該View標識。當需要更新這個View的數據時,通過調用ViewPager.findViewWithTag方法找到相應的View,然後更新View中的數據。

Ⅱ android怎麼viewpager實現循環切換圖片

Android中的ViewPager則實現了左右滑動的效果,ViewPager類提供了多界面切換的新效果。利用ViewPager實現圖片循環滾動代碼如下:

1、首先是布局文件,使用了一個ViewPager控制項:

java"><spanstyle="padding:0px;margin:0px;font-size:14px;"><RelativeLayoutxmlns: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.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical"
android:padding="5dip">
<TextView
android:id="@+id/tv_image_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="第一個引導頁面"
android:textColor="@android:color/white"
android:textSize="14sp"/>
<LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dip"
android:layout_gravity="center_horizontal"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
</RelativeLayout></span>

2、接下來實現一個繼承PagerAdapter的MyAdapter類,實現一個PagerAdapter,代碼如下:

<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.List;
importandroid.support.v4.view.PagerAdapter;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.ImageView;
{
privateList<ImageView>mImageViewList;
publicViewPagerAdapter(List<ImageView>imageViewList){
super();
this.mImageViewList=imageViewList;
}
/**
*該方法將返回所包含的Item總個數。為了實現一種循環滾動的效果,返回了基本整型的最大值,這樣就會創建很多的Item,
*其實這並非是真正的無限循環。
*/
@Override
publicintgetCount(){
returnInteger.MAX_VALUE;
}
/**
*判斷出去的view是否等於進來的view如果為true直接復用
*/
@Override
publicbooleanisViewFromObject(Viewarg0,Objectarg1){
returnarg0==arg1;
}
/**
*銷毀預載入以外的view對象,會把需要銷毀的對象的索引位置傳進來,就是position,
*因為mImageViewList只有五條數據,而position將會取到很大的值,
*所以使用取余數的方法來獲取每一條數據項。
*/
@Override
publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){
container.removeView(mImageViewList.get(position%mImageViewList.size()));
}
/**
*創建一個view,
*/
@Override
publicObjectinstantiateItem(ViewGroupcontainer,intposition){
container.addView(mImageViewList.get(position%mImageViewList.size()));
returnmImageViewList.get(position%mImageViewList.size());
}
}
</span>

3、最後是主界面部分的代碼:

<spanstyle="padding:0px;margin:0px;font-size:14px;">packagecom.example.viewpagertest;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.Message;
importandroid.os.SystemClock;
importandroid.support.v4.view.ViewPager;
importandroid.support.v4.view.ViewPager.OnPageChangeListener;
importandroid.view.View;
importandroid.widget.ImageView;
importandroid.widget.LinearLayout;
importandroid.widget.LinearLayout.LayoutParams;
importandroid.widget.TextView;

{

privateList<ImageView>imageViewList;
privateTextViewtvDescription;
privateLinearLayoutllPoints;
privateString[]imageDescriptions;
=0;
privateViewPagermViewPager;
privatebooleanisLoop=true;
privateHandlerhandler=newHandler(){

@Override
publicvoidhandleMessage(Messagemsg){
super.handleMessage(msg);

mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1);
}
};

@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setView();
initView();
}

publicvoidsetView(){
setContentView(R.layout.activity_splash_viewpager);

//自動切換頁面功能
newThread(newRunnable(){

@Override
publicvoidrun(){
while(isLoop){
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
}
}).start();
}

publicvoidinitView(){
mViewPager=(ViewPager)findViewById(R.id.viewpager);
tvDescription=(TextView)findViewById(R.id.tv_image_description);
llPoints=(LinearLayout)findViewById(R.id.ll_points);

prepareData();

ViewPagerAdapteradapter=newViewPagerAdapter(imageViewList);
mViewPager.setAdapter(adapter);
mViewPager.setOnPageChangeListener(this);

tvDescription.setText(imageDescriptions[previousSelectPosition]);
llPoints.getChildAt(previousSelectPosition).setEnabled(true);

/**
*2147483647/2=1073741820-1
*設置ViewPager的當前項為一個比較大的數,以便一開始就可以左右循環滑動
*/
intn=Integer.MAX_VALUE/2%imageViewList.size();
intitemPosition=Integer.MAX_VALUE/2-n;

mViewPager.setCurrentItem(itemPosition);
}

privatevoidprepareData(){
imageViewList=newArrayList<ImageView>();
int[]imageResIDs=getImageResIDs();
imageDescriptions=getImageDescription();

ImageViewiv;
Viewview;
for(inti=0;i<imageResIDs.length;i++){
iv=newImageView(this);
iv.setBackgroundResource(imageResIDs[i]);
imageViewList.add(iv);

//添加點view對象
view=newView(this);
view.setBackgroundDrawable(getResources().getDrawable(R.drawable.point_background));
LayoutParamslp=newLayoutParams(5,5);
lp.leftMargin=10;
view.setLayoutParams(lp);
view.setEnabled(false);
llPoints.addView(view);
}
}

privateint[]getImageResIDs(){
returnnewint[]{
R.drawable.bg1,
R.drawable.bg2,
R.drawable.bg3,
R.drawable.pic_01,
R.drawable.pic_02
};
}

privateString[]getImageDescription(){
returnnewString[]{
"第一個引導頁面",
"第二個引導頁面",
"第三個引導頁面",
"第四個引導頁面",
"第五個引導頁面"
};
}
@Override
(intarg0){

}
@Override
publicvoidonPageScrolled(intarg0,floatarg1,intarg2){

}
@Override
publicvoidonPageSelected(intposition){
//改變圖片的描述信息
tvDescription.setText(imageDescriptions[position%imageViewList.size()]);
//切換選中的點,把前一個點置為normal狀態
llPoints.getChildAt(previousSelectPosition).setEnabled(false);
//把當前選中的position對應的點置為enabled狀態
llPoints.getChildAt(position%imageViewList.size()).setEnabled(true);
previousSelectPosition=position%imageViewList.size();
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
isLoop=false;
}
}
</span>

Ⅲ android使用ViewPager實現輪播效果教程

ViewPager:一個可以實現視圖左右滑動切換的控制項。
ViewPager的基本使用:
ViewPager的視圖需要通過PagerAdapter來實現顯示。
PagerAdapter的主要方法:
● getCount 視圖的數量
● instantiateItem 添加視圖
● destroyItem 銷毀視圖
● isViewFromObject 是否由對象創建視圖
ViewPager的常用方法:
setAdapter 設置適配器
addOnPageChangeListener 監聽頁面切換的狀態
setCurrentItem 設置當前頁面的索引
實現廣告輪播
技術點分析:
1、網路連接
2、JSON解析
3、ViewPager的初始化
4、圖片的非同步載入
5、圓點指示器的實現
使用selector+shape實現圓點圖片
動態創建ImageView添加到集合中,同時添加到布局中
在ViewPager切換事件中,切換圓點狀態
6、自動切換效果
使用Handler的post方法,定時執行代碼
資源文件:
mydot.xml //創建圓點資源,放在drawable文件下
布局文件:
activity_main.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lv_list" /
activity_banner.xml
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:id="@+id/vp_image"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:layout_gravity="center" /
android:layout_width="match_parent"
android:layout_height="40dp"
android:id="@+id/layout"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal"
java代碼
ImageLoader.java //該代碼是通過URL獲取圖片資源
package cn.e.huse.banner_re.util;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 圖片載入的工具類
* @author xray
*
*/
public class ImageLoader {
/**
* 圖片載入完成的回調介面
* 添加URL參數,用於做圖片錯位判斷
*/
public interface OnImageLoadListener{
//完成圖片載入
void onImageLoadComplete(String url, Bitmap bitmap);
}
private OnImageLoadListener mListener;
/**
* 啟動圖片載入任務
* @param urlStr
* @param listener
*/
public void loadImage(String urlStr,OnImageLoadListener listener){
this.mListener = listener;
new ImageLoadTask().execute(urlStr);
}
/**
* 圖片載入任務
* @author xray
*
*/
class ImageLoadTask extends AsyncTask
@Override
protected UrlAndBitmap doInBackground(String... params) {
try {
//創建URL,指定圖片地址
URL url = new URL(params[0]);
//打開連接獲得HttpURLConnection對象
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//獲得文件輸入流
InputStream stream = conn.getInputStream();
//把輸入流轉換為圖片
Bitmap bmp = BitmapFactory.decodeStream(stream);
//關閉流
stream.close();
return new UrlAndBitmap(params[0],bmp);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//包裝圖片地址和圖片
class UrlAndBitmap{
String url;
Bitmap bitmap;
public UrlAndBitmap(String url, Bitmap bitmap) {
this.url = url;
this.bitmap = bitmap;
}
}
@Override
protected void onPostExecute(UrlAndBitmap result) {
//進行介面回調
if(mListener != null){
mListener.onImageLoadComplete(result.url,result.bitmap);
}
}
}
}
JSONLoader.java
//讀取伺服器json
package cn.e.huse.banner_re.util;
import android.os.AsyncTask;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* 讀取伺服器JSON的工具類
* @author xray
*
*/
public class JSONLoader {
public interface OnJSONLoadListener{
void onJSONLoadComplete(String json);
}
private OnJSONLoadListener mListener;
public void loadJSON(String urlStr,OnJSONLoadListener listener){
this.mListener = listener;
new JSONLoadTask().execute(urlStr);
}
class JSONLoadTask extends AsyncTask
@Override
protected String doInBackground(String... params) {
try {
URL url = new URL(params[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inputStream = conn.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
//StringBuffer 線程安全,性能低 VS StringBuilder 線程不安全,性能高
StringBuilder strB = new StringBuilder();
while((len = inputStream.read(buffer)) != -1){
//將位元組碼轉換為String
String str = new String(buffer,0,len);
strB.append(str);
}
inputStream.close();
return strB.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
if(mListener != null){
mListener.onJSONLoadComplete(result);
}
}
}
}
MyViewPagerAdapter.java
package cn.e.huse.banner_re.adapter;
import java.util.List;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
/**
* 圖片輪播的適配器
* @author Lenovo
*
*/
public class MyViewPagerAdapter extends PagerAdapter {
private List mData;
public MyViewPagerAdapter(List mData) {
this.mData = mData;
}
//返回視圖的數量
@Override
public int getCount() {
return mData.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
//銷毀圖片
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mData.get(position));
}
//添加圖片
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mData.get(position));
return mData.get(position);
}
}
MainActivity.java
package cn.e.huse.banner_re;
import java.util.ArrayList;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import cn.e.huse.banner_re.adapter.MyViewPagerAdapter;
import cn.e.huse.banner_re.util.ImageLoader;
import cn.e.huse.banner_re.util.ImageLoader.OnImageLoadListener;
import cn.e.huse.banner_re.util.JSONLoader;
import cn.e.huse.banner_re.util.JSONLoader.OnJSONLoadListener;
public class MainActivity extends Activity implements OnClickListener{
public static final String URL_GIFT = "http://www.1688wan.com/majax.action?method=getGiftListpageno=1";
public static final String URL_BASE = "http://www.1688wan.com";
private ListView mLv;
//放置圓點圖片的布局
private LinearLayout mLayout;
private ViewPager mPager;
//保存viewpager上圖片的集合
private List mImageViews;
//保存圓點圖片的集合
private List mDotViews;
//當前圖片
private ImageView mDotView;
//當前下標
private int mIndex;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化viewpager
initViewPager();
}
private void initViewPager() {
new JSONLoader().loadJSON(URL_GIFT, new OnJSONLoadListener() {
@Override
public void onJSONLoadComplete(String json) {
//得到圖片的地址
List list = josnPare(json);
//初始化主控制項
initView();
//將圖片顯示到viewpager中
initImageViews(list);
//為ViewPager設置適配器
mPager.setAdapter(new MyViewPagerAdapter(mImageViews));
//載入圓點圖片
initDot(mImageViews.size());
//實現圖片的輪播
mPager.postDelayed(new Runnable() {
@Override
public void run() {
//下標自動++
mIndex++;
//當下標到最後時,就重新來過
if(mIndex = mImageViews.size()){
mIndex = 0;
}
//設置圖片
mPager.setCurrentItem(mIndex);
//重復調用
mHandler.postDelayed(this, 1500);
}
}, 1500);
//添加頁碼滑動的監聽,實現圓點圖片的切換
mPager.setOnPageChangeListener(new OnPageChangeListener() {
//頁選中後調用
@Override
public void onPageSelected(int arg0) {
//改變原來的圓點圖片的狀態
mDotView.setEnabled(true);
//更新當前的圓點圖片
mDotView = mDotViews.get(arg0);
//將當前選中的圓點設為選中狀態
mDotView.setEnabled(false);
//更新下標
mIndex = arg0;
}
//滑動中途調用
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
//頁面滑動狀態修改
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
});
}
/**獲取圓點圖片函數
* @param count viewpager上圖片的數量
*/
private void initDot(int count){
mDotViews = new ArrayList();
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
//設置邊距
params.setMargins(5, 0, 5, 0);
for(int i = 0; i count; i++){
ImageView image = new ImageView(this);
//設置圓點圖片
image.setImageResource(R.drawable.mydot);
//設置圖片的位置,方便後面的取值
image.setTag(i);
//設置監聽
image.setOnClickListener(this);
//添加到布局中
mLayout.addView(image, params);
//將圓點圖片保存到集合中
mDotViews.add(image);
}
mDotView = mDotViews.get(0);
mDotView.setEnabled(false);
}
/**
*顯示圖片的函數
*/
private void initImageViews(List list) {
mImageViews = new ArrayList();
for(String str : list){
final ImageView imageView = new ImageView(this);
//設置默認圖片
imageView.setImageResource(R.drawable.ic_launcher);
new ImageLoader().loadImage(URL_BASE+str, new OnImageLoadListener() {
@Override
public void onImageLoadComplete(String url, Bitmap bitmap) {
if(bitmap != null){
imageView.setImageBitmap(bitmap);
}
}
});
//將ImageView保存到集合中
mImageViews.add(imageView);
}
}
/**
* JSON解析獲取圖片的地址
* @param url
* @return
*/
private List josnPare(String url){
List list = new ArrayList();
try {
JSONObject jobj = new JSONObject(url);
JSONArray array = jobj.getJSONArray("ad");
for(int i = 0; i array.length(); i++){
JSONObject obj = (JSONObject) array.get(i);
list.add(obj.getString("iconurl"));
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
/**
* 初始化控制項
*/
private void initView() {
//找到控制項
mLv = (ListView) findViewById(R.id.lv_list);
View view = LayoutInflater.from(this).inflate(R.layout.activity_banner, null);
mPager = (ViewPager)view.findViewById(R.id.vp_image);
//圓點圖片布局
mLayout = (LinearLayout)view.findViewById(R.id.layout);
//模擬數據
List mList = new ArrayList();
for(int i = 0; i 20; i++){
mList.add("條目--"+i);
}
//創建適配器
ArrayAdapter mAdapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1,
android.R.id.text1,
mList);
//設置頭部視圖
mLv.addHeaderView(view);
//設置適配器
mLv.setAdapter(mAdapter);
/*//圓點圖片布局
mLayout = (LinearLayout)findViewById(R.id.layout);*/
}
/**
* 圓點圖片的監聽事件
*/
@Override
public void onClick(View arg0) {
//獲取該圓點圖片的位置
int index = Integer.parseInt(arg0.getTag().toString());
//將viewpager的圖片顯示成下標為index的圖片
mPager.setCurrentItem(index);
//將原來的設置成默認值
mDotView.setEnabled(true);
//保存新的值
mDotView = (ImageView) arg0;
//將新的值改變成false
mDotView.setEnabled(false);
//更新下標
mIndex = index;
}
}
注意:因為這里用到了json解析,需要用到聯網操作,一定要寫上上網的許可權:

   運行效果:

Ⅳ Android viewPager第一個頁面數據不顯示

getNetData方法調用的時機不對,太早調用了。把這個方法往後面的生命周期方法里放。

比如onViewCreated,onResume。看下面的圖。

熱點內容
編程右交換 發布:2025-03-16 15:28:43 瀏覽:399
根號的除法運演算法則 發布:2025-03-16 15:26:35 瀏覽:764
冰箱壓縮機照片 發布:2025-03-16 15:25:34 瀏覽:882
博雅象棋伺服器地址 發布:2025-03-16 15:02:26 瀏覽:816
如何實現職業化配置管理 發布:2025-03-16 14:55:41 瀏覽:968
一編程就頭疼 發布:2025-03-16 14:39:25 瀏覽:502
如何連接自己的個人伺服器 發布:2025-03-16 14:33:14 瀏覽:747
安卓緩存照片進相冊里怎麼取消 發布:2025-03-16 14:33:08 瀏覽:739
a站怎麼緩存 發布:2025-03-16 14:31:28 瀏覽:992
javascriptdes演算法 發布:2025-03-16 14:23:57 瀏覽:321