




版權(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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年企業(yè)招聘呼和浩特旭陽中燃能源有限公司招聘筆試真題
- 2024年空港數(shù)字城市開發(fā)建設(shè)有限公司社會招聘筆試真題
- 2025至2030年中國氧化鐵黃顏料數(shù)據(jù)監(jiān)測研究報告
- 使用林地合同范本
- 2024年共青團中央所屬單位招聘筆試真題
- 原材料調(diào)撥協(xié)議
- 2024年安徽藝術(shù)學院校聘教師招聘考試真題
- 拍攝團隊合同范本
- 友好合作臨時工合同
- 種植業(yè)技術(shù)創(chuàng)新在商業(yè)領(lǐng)域的應(yīng)用
- 感應(yīng)加熱操作規(guī)程
- 最新小學二年級口算及豎式計算練習題
- 腦病科中醫(yī)疾病護理常規(guī)(精)
- 生產(chǎn)與運作管理-陳榮秋
- 病理生理學教學病生6休克課件
- 金雞冠的公雞繪本課件
- 日影朝向及長短
- 沙盤游戲治療(課堂PPT)
- (完整版)學生的自我評價的表格
- 樸素貝葉斯分類器完整
- 教育系統(tǒng)績效工資分配方案(共6頁)
評論
0/150
提交評論