Gallery一次滾動顯示一張圖片

來源:互聯網
上載者:User

如的廣告控制項需求

  1. 每次顯示一張圖片

  2. 每次只能滑動一張

  3. 可以自動播放

  • 自訂廣告控制項繼承自Gallery

/**

* 圖片gallery 每次只能滑動一個

* @author cmm

* @date 2012-02-02

* @version 1.0

*/

public class ImageGallery extends Gallery {

public ImageGallery(Context context, AttributeSet paramAttributeSet) {

super(context, paramAttributeSet);

}

@Override

public boolean onFling(MotionEvent paramMotionEvent1,

MotionEvent paramMotionEvent2, float paramFloat1, float paramFloat2) {

return false;

}

@Override

public boolean onScroll(MotionEvent paramMotionEvent1,MotionEvent paramMotionEvent2, float paramFloat1, float paramFloat2) {

float f = 1.4F * paramFloat1;

return super.onScroll(paramMotionEvent1, paramMotionEvent2, f,paramFloat2);

}http://www.eoeandroid.com/thread-102526-1-1.html

@Override

protected boolean getChildStaticTransformation(View child, Transformation t) {

return true;

}

}

  • Adapter item 布局 寬度FillParent

<?xml version="1.0" encoding="UTF-8"?>

<!-- 廣告項item -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content" >

  <ImageView

      android:id="@+id/qianghaoqi_ad_item_image"

     android:layout_width="fill_parent"

      android:layout_height="300.0dip"

      android:paddingBottom="20.0dip"

      android:paddingLeft="20.0dip"

      android:paddingRight="20.0dip"

      android:paddingTop="28.0dip"

      android:scaleType="fitXY" />

</RelativeLayout>

  • 自動播放

/**

* 自動滾動播放 滾動播放主要是採用Timer和Handler聯合實現。 Timer中負責定時更新訊息的產生以及傳送,

* 由Handler接收到處理訊息後重新設定當前顯示的圖片。

*/

final Handler mAutoGalleryHandler = new Handler() {

public void handleMessage(Message message) {

super.handleMessage(message);

switch (message.what) {

case HandlerTypeUtils.HANDLER_TYPE_LOAD_DATA_MAIN_GALLERY_POS:

mImageGallery.setSelection(message.getData().getInt(

ConstantUtil.GALLERY_POS));

break;

}

}

};

Timer mAutoTimer;


/**

* Timer 負責定時更新訊息的產生以及傳送, aDelay秒後,每隔aPeriod秒執行資訊發送

*

* @param aDelay

* @param aPeriod

*/

protected void setTimer(long aDelay, long aPeriod,final int aPos) {

if (mAutoTimer!=null) {

mAutoTimer.cancel();

}

mAutoTimer = new Timer();

mAutoTimer.schedule(new TimerTask() {

int gallerypisition = aPos;


@Override

public void run() {

if (gallerypisition < mCount - 1) {

gallerypisition = gallerypisition + 1;

} else {

gallerypisition = 0;

}


Message msg = new Message();

Bundle date = new Bundle();// 存放資料

date.putInt(ConstantUtil.GALLERY_POS, gallerypisition);

msg.setData(date);

msg.what = HandlerTypeUtils.HANDLER_TYPE_LOAD_DATA_MAIN_GALLERY_POS;// 訊息標識

mAutoGalleryHandler.sendMessage(msg);

}

}, aDelay, aPeriod);// 5秒後,每隔5秒執行資訊發送

}

  • 布局檔案 Gallery藥包含在FrameLayout中,防止抖動

<!-- 首頁廣告 -->

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:myspace="http://schemas.android.com/apk/res/com.blade.qianghaoqi"

  android:id="@+id/qianghaoqi_ad_layout"

  android:layout_width="fill_parent"

  android:layout_height="wrap_content"

  android:orientation="vertical" >

  <com.blade.qianghaoqi.ui.uiCommon.baseView.ImageGallery

      android:id="@+id/qianghaoqi_ad_gallery"

      android:layout_width="fill_parent"

      android:layout_height="wrap_content"

      android:animationDuration="100"

      android:fadingEdge="none"

      android:spacing="0.0dip" />

<!--添加標誌點-->

<LinearLayout

      android:id="@+id/qianghaoqi_ad_position"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:layout_gravity="bottom|center"

      android:orientation="horizontal"

      android:paddingBottom="5.0dip" >

  </LinearLayout>

</FrameLayout>

  • 載入標誌點

/**

* 載入標誌點

*/

protected void loadPositionImage() {

ImageView aImageView = null;

mLinearLayout.removeAllViews();

for (int i = 0; i < mCount; i++) {

aImageView = new ImageView(this);

if (i == 0) {

aImageView

.setImageResource(R.drawable.game_blade_qianghaoqi_alert_dialog_help_selected);

} else {

aImageView

.setImageResource(R.drawable.game_blade_qianghaoqi_alert_dialog_help_unselected);

}

mLinearLayout.addView(aImageView);

}

}

/**

* 更改標誌點狀態

*

* @param aPos

*/

public void changePositionImage(int aPos) {

ImageView aImageView = (ImageView) mLinearLayout.getChildAt(aPos);

if (aImageView != null) {

aImageView

.setImageResource(R.drawable.game_blade_qianghaoqi_alert_dialog_help_selected);

}

for (int i = 0; i < mCount; i++) {

if (i != aPos) {

aImageView = (ImageView) mLinearLayout.getChildAt(i);

aImageView

.setImageResource(R.drawable.game_blade_qianghaoqi_alert_dialog_help_unselected);

}

}

}

@Override

public void onItemSelected(AdapterView<?> parent, View view, int position,

long id) {

changePositionImage(position);

setActionAdData(position);

}

 

 

 

轉自:http://mmandroid.diandian.com/post/2012-02-27/16773046

 

牛人部落格空間

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.