Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> android中文api(79)——Gallery

android中文api(79)——Gallery

編輯:Android開發實例

正文

  一、結構

         public class Gallery extends AbsSpinner

implements GestureDetector.OnGestureListener

 

java.lang.Object

  android.view.View

           android.view.ViewGroup

                   android.widget.AdapterView<T extends android.widget.Adapter>

                           android.widget.AbsSpinner

                                   android.widget.Gallery

 

  二、概述

    

     一個鎖定中心條目並且擁有水平滾動列表的視圖。

  Gallery(畫廊)使用Theme_galleryItemBackground作為Gallery(畫廊)適配器中的各視圖的默認參數。如果你沒有設置,你就需要調整一些Gallery(畫廊)的屬性,比如間距。

  Gallery(畫廊)中的視圖應該使用Gallery.LayoutParams作為它們的布局參數類型。

    參見Gallery tutorial

 

  三、內部類

  class                   Gallery.LayoutParams

    Gallery(畫廊)擴展了LayoutParams,以此提供可以容納當前的轉換信息和先前的位置轉換信息的場所。

 

  四、XML屬性

屬性名稱

描述

android:animationDuration

設置布局變化時動畫的轉換所需的時間(毫秒級)。僅在動畫開始時計時。該值必須是整數,比如:100。

android:gravity

 指定在對象的X和Y軸上如何放置內容。指定一下常量中的一個或多個(使用 “|”分割)

Constant

Value

Description

top

0x30

緊靠容器頂端,不改變其大小

bottom

0x50

緊靠容器底部,不改變其大小

left

0x03

緊靠容器左側,不改變其大小

right

0x05

緊靠容器右側,不改變其大小

center_vertical

0x10

垂直居中,不改變其大小

fill_vertical

0x70

垂直方向上拉伸至充滿容器

center_horizontal

0x01

水平居中,不改變其大小

Fill_horizontal

0x07

水平方向上拉伸使其充滿容器

center

0x11

居中對齊,不改變其大小

fill

0x77

在水平和垂直方向上拉伸,使其充滿容器

clip_vertical

0x80

垂直剪切(當對象邊緣超出容器的時候,將上下邊緣超出的部分剪切掉)

clip_horizontal

0x08

水平剪切(當對象邊緣超出容器的時候,將左右邊緣超出的部分剪切掉)

android:spacing

(譯者注:設置圖片之間的間距)

android:unselectedAlpha

 設置未選中的條目的透明度(Alpha)。該值必須是float類型,比如:“1.2”。

 

  五、公共方法

  public boolean dispatchKeyEvent (KeyEvent event)

           在焦點路徑上分發按鈕事件到下一個視圖。該路徑從視圖樹的頂端遍歷到當前獲得焦點的視圖。如果當前視圖已獲得焦點,就分發給自身。否則,就分發到下一個節點的焦點路徑上。該方法監聽任何按鈕事件。

  參數

                   event        被分發的按鈕事件

                 返回值

                   時間被處理返回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

  參見

        onKeyDown(int, KeyEvent)


  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       相對父容器的底部位置

 

 

  七、補充
 

  示例代碼

      Java文件

public class MyGallery extends Activity {
    /** Called when the activity is first created. */
    private Gallery gallery;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gallery = (Gallery)findViewById(R.id.gallery);
        gallery.setAdapter(new ImageAdapter(this));//設置圖片適配器
        //設置監聽器
        gallery.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,    long arg3) {
                Toast.makeText(MyGallery.this, "點擊了第"+arg2+"張圖片", Toast.LENGTH_LONG).show();
            }
        });
    }
}

class ImageAdapter extends BaseAdapter{
    private Context context;
    //圖片源數組
    private Integer[] imageInteger={
            R.drawable.gallery_photo_1,
            R.drawable.gallery_photo_2,
            R.drawable.gallery_photo_3,
            R.drawable.gallery_photo_4,
            R.drawable.gallery_photo_5,
            R.drawable.gallery_photo_6,
            R.drawable.gallery_photo_7,
            R.drawable.gallery_photo_8
    };
    public ImageAdapter(Context c){
        context = c;
    }
    @Override
    public int getCount() {
        return imageInteger.length;
    }
    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @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.setImageResource(imageInteger[position]);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        imageView.setLayoutParams(new Gallery.LayoutParams(136, 88));
        return imageView;
    }
    }

      XML文件

<?xml version="1.0" encoding="utf-8"?>
<Gallery xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gallery"
            android:layout_width="fill_parent"
           android:layout_height="wrap_content"
          android:gravity="center_vertical"
            android:background="?android:galleryItemBackground"
           />

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved