【移動應(yīng)用開發(fā)技術(shù)】怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果_第1頁
【移動應(yīng)用開發(fā)技術(shù)】怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果_第2頁
【移動應(yīng)用開發(fā)技術(shù)】怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果_第3頁
【移動應(yīng)用開發(fā)技術(shù)】怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果_第4頁
【移動應(yīng)用開發(fā)技術(shù)】怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

【移動應(yīng)用開發(fā)技術(shù)】怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果

這篇文章給大家介紹怎么在Android中使用ViewPager實現(xiàn)一個滾動廣告效果,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。文件結(jié)構(gòu):布局文件:<?xml

version="1.0"

encoding="utf-8"?>

<RelativeLayout

xmlns:android="/apk/res/android"

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="yuxin.ad.MainActivity">

<android.support.v4.view.ViewPager

android:id="@+id/viewPager"

android:layout_width="wrap_content"

android:layout_height="200dp"

android:adjustViewBounds="true"

/>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignBottom="@id/viewPager"

android:background="#33000000"

android:orientation="vertical"

android:padding="5dp">

<LinearLayout

android:id="@+id/show_point"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:orientation="horizontal"

/>

</LinearLayout>

</RelativeLayout>最上面是一個ViewPager,用來展示需要滾動播放的圖片;下面是一個線性布局,用來放最下面的幾個小圓點,也可以在里面放一些TextView等,小圓點的數(shù)量是根據(jù)圖片數(shù)量動態(tài)添加的。MainActivity.javapublic

class

MainActivity

extends

AppCompatActivity

{

private

ViewPager

viewPager;

//

存放圖片

private

List<ImageView>

imageViewList;

private

ImageView

imageView;

//

存放小圓點布局文件

private

LinearLayout

layoutPointGroup;

//

線程開關(guān),當activity銷毀后,線程也應(yīng)該停止運行

private

boolean

isStop

=

false;

private

int

previousPoint

=

0;

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//

初始化

init();

//設(shè)置圖片自動滾動

new

Thread(new

Runnable()

{

@Override

public

void

run()

{

//如果activity未銷毀則一直執(zhí)行

while

(!isStop)

{

//先休息3秒鐘

try

{

Thread.sleep(3000);

}

catch

(InterruptedException

e)

{

e.printStackTrace();

}

//以下代碼發(fā)送到主線程中執(zhí)行

runOnUiThread(new

Runnable()

{

@Override

public

void

run()

{

viewPager.setCurrentItem(viewPager.getCurrentItem()

+

1);

}

});

}

}

}).start();

}

private

void

init()

{

viewPager

=

(ViewPager)

findViewById(R.id.viewPager);

layoutPointGroup

=

(LinearLayout)

findViewById(R.id.show_point);

imageViewList

=

new

ArrayList<ImageView>();

//

TODO:獲取圖片ID

int[]

imageIDs

=

{R.drawable.a,

R.drawable.b,

R.drawable.c,

R.drawable.d,

R.drawable.e};

for

(int

id

:

imageIDs)

{

//

構(gòu)造新的圖片對象,并根據(jù)id

設(shè)置圖片背景

imageView

=

new

ImageView(this);

imageView.setImageResource(id);

//

所有圖片都存放在

imageViewList

里面

imageViewList.add(imageView);

//

構(gòu)造小點

View

v

=

new

View(this);

//

設(shè)置小點的寬和高

LinearLayout.LayoutParams

params

=

new

LinearLayout.LayoutParams(8,

8);

//

設(shè)置小點的左邊距

params.leftMargin

=

12;

v.setLayoutParams(params);

//

設(shè)置小點是否可用,默認都不可用,當不可用時,小點是透明的,否則是白色的

v.setEnabled(false);

//

設(shè)置小點的背景,這個背景是使用xml文件畫的一個小圓點

v.setBackgroundResource(R.drawable.pointer_selector);

//

把小點添加到它的布局文件中

layoutPointGroup.addView(v);

}

//

計算應(yīng)用打開時顯示的第一項

Integer.MAX_VALUE

/2

-

3=0

int

index

=

Integer.MAX_VALUE

/

2

-

3;

//

給mViewPager設(shè)置數(shù)據(jù)

viewPager.setAdapter(new

MyPagerAdapter());

//

給mViewPager設(shè)置頁面滑動事件

viewPager.setOnPageChangeListener(new

MyOnPageChangeListener());

//

設(shè)置應(yīng)用打開時顯示的第一項,index的值為0

//

使用這種方式得到的0,和直接寫0有什么區(qū)別呢?

//

直接寫0,應(yīng)用打開后不能直接向右滑動,因為viewpager中存image位置不能為負值,只能先向左滑動

//

這種方式得到的0,可以實現(xiàn)應(yīng)用一打開,就可以向右滑動

viewPager.setCurrentItem(index);

}

private

class

MyPagerAdapter

extends

PagerAdapter

{

@Override

public

int

getCount()

{

return

Integer.MAX_VALUE;

}

@Override

public

boolean

isViewFromObject(View

view,

Object

object)

{

return

view

==

object;

}

//

當一頁滑出去的時候?qū)⑺N毀

@Override

public

void

destroyItem(ViewGroup

container,

int

position,

Object

object)

{

container.removeView(imageViewList.get(position

%

imageViewList.size()));

}

//

向容器中添加圖片,由于我們要實現(xiàn)循環(huán)滑動的效果,所以要對position取模

@Override

public

Object

instantiateItem(ViewGroup

container,

int

position)

{

container.addView(imageViewList.get(position

%

imageViewList.size()));

return

imageViewList.get(position

%

imageViewList.size());

}

}

private

class

MyOnPageChangeListener

implements

ViewPager.OnPageChangeListener

{

//

開始

@Override

public

void

onPageScrolled(int

position,

float

positionOffset,

int

positionOffsetPixels)

{

}

//

進行時

@Override

public

void

onPageSelected(int

position)

{

//

當頁面滑動結(jié)束時,先對頁面位置取模

position

=

position

%

imageViewList.size();

//

將上一個點的可用性設(shè)置為false

layoutPointGroup.getChildAt(previousPoint).setEnabled(false);

//

把當前點的可用性設(shè)置為true

layoutPointGroup.getChildAt(position).setEnabled(true);

//

把當前位置值賦值給previousPoint

previousPoint

=

position;

}

//

結(jié)束

@Override

public

void

onPageScrollStateChanged(int

state)

{

}

}

//

當activity銷毀時,讓線程停止

@Override

public

void

onDestroy()

{

isStop

=

true;

super.onDestroy();

}

}具體功能實現(xiàn)可以看代碼里的注釋,寫的十分詳細了。未選中的小圓點pointer_disable.xml:<?xml

version="1.0"

encoding="utf-8"?>

<shape

xmlns:android="/apk/res/android"

android:shape="oval"

>

<!--

設(shè)置圓角半徑

-->

<corners

android:radius="0.5dip"

/>

<!--

設(shè)置填充的顏色

-->

<solid

android:color="#55000000"

/>

</shape>選中時的小圓點pointer_focus.xml:<?xml

version="1.0"

encoding="utf-8"?>

<shape

xmlns:android="/apk/res/android"

android:shape="oval"

>

<corners

android:radius="0.5dip"

/>

<solid

android:color="#aaFFFFFF"

/>

</shape>小圓點選擇器:<?xml

version="1.0"

encoding="utf-8"?>

<selector

xmlns:android="/apk/res/android">

<!--

選中時,小點為白色

-->

<item

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論