【移動應用開發(fā)技術】Android中怎么利用Gallery實現(xiàn)幻燈片效果_第1頁
【移動應用開發(fā)技術】Android中怎么利用Gallery實現(xiàn)幻燈片效果_第2頁
【移動應用開發(fā)技術】Android中怎么利用Gallery實現(xiàn)幻燈片效果_第3頁
【移動應用開發(fā)技術】Android中怎么利用Gallery實現(xiàn)幻燈片效果_第4頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

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

文檔簡介

【移動應用開發(fā)技術】Android中怎么利用Gallery實現(xiàn)幻燈片效果

今天就跟大家聊聊有關Android中怎么利用Gallery實現(xiàn)幻燈片效果,可能很多人都不太了解,為了讓大家更加了解,在下給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。(1)幻燈片效果的實現(xiàn):自定義Gallery:DetailGallery.java可視界面:ImgSwitchActivity.java適配類:GalleryIndexAdapter.java1)自定義Gallery主要重寫onFling通過按下和松手的位置不同比較是向右移動還是向左移動,部分代碼如下:private

boolean

isScrollingLeft(MotionEvent

e1,

MotionEvent

e2)

{

return

e2.getX()

>

e1.getX();

}

@Override

public

boolean

onFling(MotionEvent

e1,

MotionEvent

e2,

float

velocityX,

float

velocityY)

{

int

kEvent;

if

(isScrollingLeft(e1,

e2))

{

kEvent

=

KeyEvent.KEYCODE_DPAD_LEFT;

}

else

{

kEvent

=

KeyEvent.KEYCODE_DPAD_RIGHT;

}

onKeyDown(kEvent,

null);

return

true;

}2)在適配類

GalleryIndexAdapter主要完成幻燈片的循環(huán)播放,在getCount里面返回值返回Integer.MAX_VALUE,然后在getView里面根據(jù)position與傳進來初始圖片個數(shù)進行余數(shù)計算得到每次循環(huán)到哪張圖片。部分代碼如下:@Override

public

int

getCount()

{

//

TODO

Auto-generated

method

stub

return

Integer.MAX_VALUE;

}

……

@Override

public

View

getView(int

position,

View

convertView,

ViewGroup

arg2)

{

//

TODO

Auto-generated

method

stub

ImageView

imageView

=

new

ImageView(context);

imageView.setBackgroundResource(imagList.get(position%imagList.size()));

imageView.setScaleType(ScaleType.FIT_XY);

imageView.setLayoutParams(new

Gallery.LayoutParams(Gallery.LayoutParams.FILL_PARENT

,

Gallery.LayoutParams.WRAP_CONTENT));

return

imageView;

}3)在可視界面里面實現(xiàn)邏輯控制,通過定時器定時刷新幻燈片,定時器通過定時發(fā)送消息,消息接受處理機制接收到消息之后,就模擬滑動事件,調(diào)用Gallery的onFling方法實現(xiàn)圖片自動切換效果。選擇按鈕的顯示效果(RadioButton)需要在Gallery的setOnItemSelectedListener進行處理。//定時器和事件處理5秒刷新一次幻燈片

/**

展示圖控制器,實現(xiàn)展示圖切換

*/

final

Handler

handler_gallery

=

new

Handler()

{

public

void

handleMessage(Message

msg)

{

/*

自定義屏幕按下的動作

*/

MotionEvent

e1

=

MotionEvent.obtain(SystemClock.uptimeMillis(),

SystemClock.uptimeMillis(),

MotionEvent.ACTION_UP,

89.333336f,

265.33334f,

0);

/*

自定義屏幕放開的動作

*/

MotionEvent

e2

=

MotionEvent.obtain(SystemClock.uptimeMillis(),

SystemClock.uptimeMillis(),

MotionEvent.ACTION_DOWN,

300.0f,

238.00003f,

0);

myGallery.onFling(e2,

e1,

-800,

0);

/*

給gallery添加按下和放開的動作,實現(xiàn)自動滑動

*/

super.handleMessage(msg);

}

};

protected

void

onResume()

{

autogallery();

super.onResume();

};

private

void

autogallery()

{

/*

設置定時器,每5秒自動切換展示圖

*/

Timer

time

=

new

Timer();

TimerTask

task

=

new

TimerTask()

{

@Override

public

void

run()

{

Message

m

=

new

Message();

handler_gallery.sendMessage(m);

}

};

time.schedule(task,

8000,

5000);

}

//指示按鈕和gallery初始化過程以及事件監(jiān)聽添加過程

//初始化

void

init(){

myGallery

=

(DetailGallery)findViewById(R.id.myGallery);

gallery_points

=

(RadioGroup)

this.findViewById(R.id.galleryRaidoGroup);

ArrayList<Integer>

list

=

new

ArrayList<Integer>();

list.add(R.drawable.banner1);

list.add(R.drawable.banner2);

list.add(R.drawable.banner3);

list.add(R.drawable.banner4);

GalleryIndexAdapter

adapter

=

new

GalleryIndexAdapter(list,

context);

myGallery.setAdapter(adapter);

//設置小按鈕

gallery_point

=

new

RadioButton[list.size()];

for

(int

i

=

0;

i

<

gallery_point.length;

i++)

{

layout

=

(LinearLayout)

inflater.inflate(R.layout.gallery_icon,

null);

gallery_point[i]

=

(RadioButton)

layout.findViewById(R.id.gallery_radiobutton);

gallery_point[i].setId(i);/*

設置指示圖按鈕ID

*/

int

wh

=

Tool.dp2px(context,

10);

RadioGroup.LayoutParams

layoutParams

=

new

RadioGroup.LayoutParams(wh,

wh);

//

設置指示圖大小

gallery_point[i].setLayoutParams(layoutParams);

layoutParams.setMargins(4,

0,

4,

0);//

設置指示圖margin值

gallery_point[i].setClickable(false);/*

設置指示圖按鈕不能點擊

*/

layout.removeView(gallery_point[i]);//一個子視圖不能指定了多個父視圖

gallery_points.addView(gallery_point[i]);/*

把已經(jīng)初始化的指示圖動態(tài)添加到指示圖的RadioGroup中

*/

}

}

//添加事件

void

addEvn(){

myGallery.setOnItemSelectedListener(new

OnItemSelectedListener()

{

@Override

public

void

onItemSelected(AdapterView<?>

arg0,

View

arg1,

int

arg2,

long

arg3)

{

//

TODO

Auto-generated

method

stub

gallery_points.check(gallery_point[arg2%gallery_point.length].getId());

}

@Override

public

void

onNothingSelected(AdapterView<?>

arg0)

{

//

TODO

Auto-generated

method

stub

}

});

}(2)商品圖片滑動實現(xiàn)過程:圖片滑動效果和上面的幻燈片效果非常的類似,只是在邏輯處理和界面上有一些小小的區(qū)別。1)適配器類GalleryAdapter.java上面進行了圖片縮放處理,節(jié)省了內(nèi)存開銷,又可把圖片按照自己的要求縮放。//由于是測試case,所以圖片都是寫死的為了區(qū)別,在position

=

1的時候換了一張圖片

public

View

getView(int

position,

View

convertView,

ViewGroup

parent)

{

//

TODO

Auto-generated

method

stub

ImageView

imageView

=

(ImageView)

LayoutInflater.from(context).inflate(R.layout.img,

null);

Bitmap

bitmap

=

null;

try

{

if(position

==

1

){

bitmap

=

BitmapFactory.decodeStream(assetManager.open("xpic11247_s.jpg"));

imageView.setTag("xpic11247_s.jpg");

}

else{

bitmap

=

BitmapFactory.decodeStream(assetManager.open("item0_pic.jpg"));

imageView.setTag("item0_pic.jpg");

}

}

catch

(IOException

e)

{

//

TODO

Auto-generated

catch

block

e.printStackTrace();

}

//

加載圖片之前進行縮放

int

width

=

bitmap.getWidth();

int

height

=

bitmap.getHeight();

float

newHeight

=

200;

float

newWidth

=

width*newHeight/height;

float

scaleWidth

=

((float)

newWidth)

/

width;

float

scaleHeight

=

((float)

newHeight)

/

height;

//

取得想要縮放的matrix參數(shù)

Matrix

matrix

=

new

Matrix();

matrix.postScale(scaleWidth,

scaleHeight);

//

得到新的圖片

Bitmap

newbm

=

Bitmap.createBitmap(bitmap,

0,

0,

width,

height,

matrix,

true);

System.out.println(newbm.getHeight()+""+newbm.getWidth());

溫馨提示

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

評論

0/150

提交評論