繼承關係html
public class Gallery extends AbsSpinnerjava
implements GestureDetector.OnGestureListenerandroid
java.lang.Object數組
android.view.Viewapp
android.view.ViewGroupide
android.widget.AdapterView<T extends android.widget.Adapter>函數
android.widget.AbsSpinner佈局
android.widget.Gallery測試
Gallery控件也可翻譯爲畫廊組件,主要用於橫向顯示圖像列表。咱們經過查看Gallery類的繼承結構,發現Gallery與咱們之間講解過的Spinner有共同的父類:AbsSpinner。從某種意義上來講,Gallery和Spinner都是一個列表框,只不過Spinner是一個垂直顯示的列表模型,而Gallery則是一個水平顯示的列表框。固然Gallery主要是經過用戶拖動來展現一組圖片或其它組件,而Spinner則是提供選擇讓用戶選擇。動畫
Gallery的用戶也與Spinner類似,只須要爲它提供一個內容Adapter便可,該Adapter的getView()方法返回的View將做爲Gallery組件的列表項。若是須要監聽Gallery選擇項的改變,則爲Gallery添加OnItemSelectedListener監聽器便可。
Gallery(畫廊)使用Theme_galleryItemBackground做爲Gallery(畫廊)適配器中的各視圖的默認參數。若是你沒有設置,你就須要調整一些Gallery(畫廊)的屬性,好比間距。Gallery(畫廊)中的視圖應該使用Gallery.LayoutParams做爲它們的佈局參數類型。參見Gallery tutorial
內部類
class Gallery.LayoutParams
Gallery(畫廊)擴展了LayoutParams,以此提供能夠容納當前的轉換信息和先前的位置轉換信息的場所。
XML屬性
屬性名稱 |
描述 |
|||||||||||||||||||||||||||||||||||||||
android:animationDuration |
設置佈局變化時動畫的轉換所需的時間(毫秒級)。僅在動畫開始時計時。該值必須是整數,好比:100。 |
|||||||||||||||||||||||||||||||||||||||
android:gravity |
指定在對象的X和Y軸上如何放置內容。指定一下常量中的一個或多個(使用 「|」分割)
|
|||||||||||||||||||||||||||||||||||||||
android:spacing |
(譯者注:設置圖片之間的間距) |
|||||||||||||||||||||||||||||||||||||||
android:unselectedAlpha |
設置未選中的條目的透明度(Alpha)。該值必須是float類型,好比:「1.2」。 |
公共方法
public boolean dispatchKeyEvent (KeyEvent event)
在焦點路徑上分發按鈕事件到下一個視圖。該路徑從視圖樹的頂端遍歷到當前得到焦點的視圖。若是當前視圖已得到焦點,就分發給自身。不然,就分發到下一個節點的焦點路徑上。該方法監放任何按鈕事件。
參數
event 被分發的按鈕事件
返回值
boolean 時間被處理返回true,不然false
public void dispatchSetSelected (boolean selected)
分發setSelected給視圖的子類。
參數
selected 新選中的狀態
public ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)
返回一個新的已設置屬性集合的佈局參數。
參數
attrs 用於生成佈局參數的屬性集合
返回值
一個ViewGroup.LayoutParams實例或者它的子類
public boolean onDown (MotionEvent e)
當輕擊和按下手勢事件發生時通知該方法。任何按下事件都會直接觸發該方法。全部其餘的事件都要先於該方法。
參數
e 按下動做事件
public boolean onFling (MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
當初始化的按下動做事件和鬆開動做事件匹配時通知fling(譯者注:快滑,用戶按下觸摸屏、快速移動後鬆開)事件。該動做的速度經過計算X和Y軸上每秒移動多少像素得來。
參數
e1 致使開始fling的按下動做事件。
e2 觸發當前onFling方法的移動動做事件
velocityX 測量fling沿X軸上的速度,像素/每秒
velocityY 測量fling沿Y軸上的速度,像素/每秒
返回值
若是該事件被消耗返回true,不然false。
public boolean onKeyDown (int keyCode, KeyEvent event)
處理左,右和點擊事件
參數
keyCode 表明按下按鈕的按鍵碼,來自KeyEvent
。
event 定義按鈕動做的KeyEvent對象。
返回值
若是已經處理了按鈕事件,則返回true。若是你想讓下一個事件接收者處理,就返回false
參見
public boolean onKeyUp (int keyCode, KeyEvent event)
KeyEvent.Callback.onKeyMultiple()
方法的默認實現:當KEYCODE_DPAD_CENTER
或者 KEYCODE_ENTER
被釋放時,執行點擊視圖操做。
參數
keyCode 表明按下按鈕的按鍵碼,來自KeyEvent
。
event 定義按鈕動做的KeyEvent對象。
返回值
若是已經處理了按鈕事件,則返回true。若是你想讓下一個事件接收者處理,就返回false
public void onLongPress (MotionEvent e)
MotionEvent
初始化並按下觸發長按並通知本方法
。
參數
e 致使開始長按的初始按下動做事件。
public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
當初始按下動做事件和當前移動動做事件致使滾動時通知本方法。爲了方便提供了X和Y軸上的距離。
監聽屏幕滾動事件。爲了方便提供了X和Y軸上的距離。
參數
e1 致使滾動開始按下的動做事件。
e2 觸發當前onScroll方法的移動動做事件。
distanceX 距離是自上一次調用onScroll方法在X軸上的距離。不是e1 和e2之間的距離。
distanceY 距離是自上一次調用onScroll方法在Y軸上的距離。不是e1 和e2之間的距離。
返回值
若是該事件被消耗返回true不然false
public void onShowPress (MotionEvent e)
用戶已經執行按下動做尚未執行移動或者彈起動做。該事件常經過高亮一個元素來向用戶提供一個視覺反饋即用戶的操做已經被辨識了。
參數
e 按下動做事件
public boolean onSingleTapUp (MotionEvent e)
在輕擊動做和up動做事件觸發時通知本方法。(譯者注:點擊屏幕上的某項的執行流程 有兩種狀況,一種是時間很短,一種時間稍長:時間很短:onDown--->onSingleTapUp--->onSingleTapConfirmed,見這裏1,這裏2。)
參數
e 完成開始輕擊的up動做事件
返回值
若是該事件被消耗返回true不然false
public boolean onTouchEvent (MotionEvent event)
實現該方法來處理觸摸屏動做事件
參數
event 動做事件
返回值
若是該事件被消耗返回true不然false
public void setAnimationDuration (int animationDurationMillis)
設置當子視圖改變位置時動畫轉換時間。僅限於動畫開始時生效。
參數
animationDurationMillis 動畫轉換時間(毫秒級)
public void setCallbackDuringFling (boolean shouldCallback)
當flinged時是否回調每個getOnItemSelectedListener()
。若是設爲false,只回調最終選中的項。若是爲true,則全部的項都會回調。
參數
shouldCallback 設置拋滑的過程當中是否回調
public void setGravity (int gravity)
描述子視圖的對齊方式。
public void setSpacing (int spacing)
設置Gallery中項的間距
參數
spacing Gallery中項的間距,以像素爲單位
public void setUnselectedAlpha (float unselectedAlpha)
設置Gallery中未選中項的透明度(alpha)值。
參數
unselectedAlpha 未選中項的透明度(alpha)值
public boolean showContextMenu ()
顯示該視圖上下文菜單。
返回值
上下文菜單是否顯示。
public boolean showContextMenuForChild (View originalView)
爲指定的視圖或者其父類顯示上下文菜單。
大部分狀況下,子類不須要重寫該方法。可是,若是子類被直接添加到窗口管理器(例如:addView(View.android.view.ViewGroup.LayoutParams)),此時就須要重寫來顯示上下文菜單
參數
originalView 上下文菜單初次調用的源視圖
返回值
若是上下文菜單被顯示了 則返回true。
受保護方法
protected int computeHorizontalScrollExtent ()
在水平範圍內計算滾動條滑塊的滾動範圍。該值用來計算滾動條滑塊的長度。
該範圍可使用任意的單位可是必須跟computeHorizontalScrollRange()
和computeHorizontalScrollOffset()
的單位
保持一致。
默認範圍是視圖的寬度。
返回值
滾動條滑塊的水平滾動範圍
protected int computeHorizontalScrollOffset ()
在水平範圍內計算滾動條滑塊的偏移量。該值用來計算水平滑塊的位置。
該範圍可使用任意的單位可是必須跟computeHorizontalScrollRange()
和computeHorizontalScrollExtent()
的單位
保持一致。
默認偏移量是視圖的偏移量。
返回值
滾動條滑塊的水平偏移量。
protected int computeHorizontalScrollRange ()
計算滾動條水平方向上的滾動範圍。
該範圍可使用任意的單位可是必須跟computeHorizontalScrollExtent()
和computeHorizontalScrollOffset()
的單位
保持一致。
返回值
水平滾動條表明的滑動總範圍。
protected void dispatchSetPressed (boolean pressed)
分發 setPressed到View的子類。
參數
pressed 新按下的狀態
protected ViewGroup.LayoutParams generateDefaultLayoutParams ()
返回默認的佈局參數。當View做爲參數傳遞給addView(View)
而沒有佈局參數時就會請求這些參數。若是返回null,則addView會拋出異常。
返回值
默認的佈局參數或null
protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
返回一組合法的受支持的佈局參數。當把ViewGroup傳遞給View而該View的佈局參數並無經過checkLayoutParams(android.view.ViewGroup.LayoutParams)的測試時,就會調用該方法。該方法應該返回一組適合該ViewGroup的新的佈局參數,該過程可能須要從指定的一組佈局參數中複製相關的屬性。
參數
p 被轉換成適合該ViewGroup的一組參數。
返回值
返回一個ViewGroup.LayoutParams的實例或者一個它的子類。
protected int getChildDrawingOrder (int childCount, int i)
返回迭代的繪製子類索引。若是你想改變子類的繪製順序就要重寫該方法。默認返回 i 值。
提示:爲了可以調用該方法,你必須首先調用setChildrenDrawingOrderEnabled(boolean)
來容許子類排序。
參數
childCount 子類個數
i 當前迭代順序
返回值
繪製該迭代子類的索引
protected boolean getChildStaticTransformation (View child, Transformation t)
(譯者注:setStaticTransformationsEnabled這個屬性設成true的時候每次viewGroup(看Gallery的源碼就能夠看到它是從ViewGroup間接繼承過來的)在從新畫它的child的時候都會促發getChildStaticTransformation這個函數。這裏1、這裏2)
protected ContextMenu.ContextMenuInfo getContextMenuInfo ()
Views若是有額外的信息跟上下文菜單有聯繫的話就須要實現該方法。返回的結果被用做回調方法onCreateContextMenu(ContextMenu, View, ContextMenuInfo)的參數。
返回值
顯示上下文菜單的條目的額外信息。這些信息將會改變View不一樣的子類
protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect)
當該視圖的焦點狀態發生改變時將會調用視圖系統。當導向的方向觸發焦點事件時,方向和先前得到焦點的矩形提供焦點事件的來源。當用戶重寫該方法,必須調用父類方法來觸發標準的焦點處理事件。
參數
gainFocus 若是View得到焦點爲true,不然false
direction 當調用requestFocus()方法來給該視圖焦點時焦點的移動方向。該值:FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT 或 FOCUS_RIGHT。該參數不經常使用,一般使用它的默認值。
previouslyFocusedRect 該視圖座標系統中先前得到焦點的視圖的矩形。若是適用,這將得到焦點事件來源的更細緻的信息(除了方向之外)。不然爲null。
protected void onLayout (boolean changed, int l, int t, int r, int b)
當視圖爲每個子類分配大小和位置時從佈局中調用該方法。有子類的派生類應該重寫該方法在子類中調用佈局。
參數
changed 該視圖新的大小和位置。
l 相對父容器的左側位置
t 相對父容器的頂部位置
r 相對父容器的右側位置
b 相對父容器的底部位置
補充
文章精選
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
簡介:
這是一個很是炫的效果,能夠用手指直接拖動圖片移動,要實現這一效果,就必須有一個容器來存放Gallery索要顯示的圖片。這裏使用一個繼承自BaseAdapter的派生類來裝這些圖片。咱們須要監聽其事件setOnItemClickListener,從而肯定當前用戶選擇了那一張圖片。首先,咱們須要將顯示的圖片的索引存放在一個int數組中。而後經過setImageResource方法來設置ImageView要顯示的圖片資源。最後將每張圖片的ImageView顯示在屏幕上。
案例一:
首先定義一個佈局文件gallery.xml以下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ImageView android:id="@+id/gallery_imageview_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/gallery_01" /> <Gallery android:id="@+id/gallery_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:galleryItemBackground" /> </LinearLayout>
2.java代碼GalleryDemo.java文件:
package com.test;
import android.app.Activity; import android.content.ClipData.Item; import android.content.Context; import android.content.res.TypedArray; import android.os.Bundle; import android.view.ContextMenu; import android.view.MenuItem; import android.view.View; import android.view.ContextMenu.ContextMenuInfo; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Gallery; import android.widget.ImageView; import android.widget.Toast;
public class GalleryDemo extends Activity { private Gallery gallery; private Integer[] imageids= { R.drawable.gallery_01,R.drawable.gallery_02,R.drawable.gallery_03, R.drawable.gallery_04,R.drawable.gallery_05,R.drawable.gallery_06 }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.gallery); gallery= (Gallery)findViewById(R.id.gallery_id); //設置圖片適配器 gallery.setAdapter(new ImageAdapter(this)); gallery.setSpacing(6); //設置監聽器 gallery.setOnItemClickListener(listener); } private OnItemClickListener listener =new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // toast("點擊了"+arg2+"張圖片"); ImageView imageView = (ImageView)findViewById(R.id.gallery_imageview_id); imageView.setImageResource(imageids[arg2]); } }; @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub super.onCreateContextMenu(menu, v, menuInfo); menu.add("Action"); } @Override public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub // return super.onContextItemSelected(item); AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); Toast.makeText(this, "LOngPress"+info.position, Toast.LENGTH_LONG).show(); return true; } public class ImageAdapter extends BaseAdapter{
int galleryItemBackgroud; private Context context; //圖片數組 public ImageAdapter(Context c) { context=c; } //獲取圖片的個數 @Override public int getCount() { // TODO Auto-generated method stub return imageids.length; } //獲取圖片在庫中的位置 @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } //獲取圖片的ID @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; }
@Override public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView = new ImageView(context); //給imageVIew設置資源 imageView.setImageResource(imageids[position]); //設置顯示比例類型 imageView.setScaleType(ImageView.ScaleType.FIT_XY); //設置佈局圖片對象Imageview的寬度和高度120*80 imageView.setLayoutParams(new Gallery.LayoutParams(50,100)); // TODO Auto-generated method stub return imageView; } } }
3.運行效果: