Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> android開發ViewFlipper觸摸動畫

android開發ViewFlipper觸摸動畫

編輯:Android開發實例

  背景介紹:

  在做Android項目開發之前你需要做三件事情:第一、下載Android SDK(你可以在這裡下載),第二、准備項目編輯器(我建議使用eclipse )第三、下載Android的Eclipse插件。

  當你准備好你的環境之後,可以開始學習本教程。

  當你第一次打開Android SDK,您需要創建一個虛擬設備,我打開建議創建一個普遍的設備為目標的Android 1.6 API Level 4使用,然後你需要添加硬件功能,例如:SD卡支持,Accellerometer,相機支持等等,如果你需要幫助,安裝Android虛擬設備跟隨這個鏈接。http://developer.android.com/guide/developing/tools/avd.html

  開始eclipse項目:

  1、 選擇File > New > Project.

  2、 選擇Android > Android Project,點擊 Next.

  3、 選擇項目目錄:

  A、輸入一個項目名稱:這是你所創建的項目所處的文件夾

  B、根據目錄選擇Create new project in workspace。:選擇你的workspace的位置

  C、根據Target,選擇Android的Target,作為該項目的創建Target使用。生成的Target指定你想建立的應用的Android平台。

  說明:除非你知道你將使用最新SDK中引入的新的API,否則你應該盡可能選擇一個最低的平台版本,比如Android 1.6。

  D、根據屬性填寫必要的字段

  @鍵入應用程序的名字:

  @鍵入一個package 名:你的所有源代碼都存放在這個package中

  @選擇Create Activity項,然後為你的主Activity鍵入一個名字

  @輸入一個Min SDK Version,這是一個整數,指示需要正確運行應用程序最低的API級別。進入這個這裡會自動設置Android Manifest文件中的minSdkVersion屬性。如果你不確定需要使用的合適的API 級別,為你在Target tab中所選的Build Target復制列出的API Level。

  4、 點擊finish

  當你完成了之後,ADT已經為您創建好了以下文件夾和文件:

  src/:包含任何的ActivityJava文件。

  :包含編譯應用程序所生成的android.jar文件。

  gen/:包含了由ADT所生成的Java文件。包含R.java文件和從AIDL文件創建的接口。

  assets/:這個是空的,可用來存儲raw asset文件。

  res/:這是應用程序的資源文件,諸如:drawable files, layout files, string 值等。

  AndroidManifest.xml:項目的Android Manifest。

  default.properties:這個文件包含一些項目設置,如build target。這個文件是該項目的組成部分,因此,它被維護在一個源版本控制系統中。它絕不應手動編輯(編輯項目屬性,右鍵單擊該項目文件夾並選擇“屬性”)

  通過觸摸屏的事件,如何滑動兩個(或更多)布局,如新聞及天氣。

  現在,你已經充分了解Android並准備好了SDK等環境的搭建,我們要想做Android開發的第一件事情就是仿效的圖形效果。

  要做到這一點,我們需要一些Java代碼和XML布局的一點技巧。

<ViewFlipper
    android:layout_margin="6dip"
    android:id="@+id/layoutswitcher"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView
            android:layout_height="wrap_content"
            android:id="@+id/firstpanel"
            android:paddingTop="10dip"
            android:text="my first panel"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:text >
        </TextView>
    </LinearLayout>
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <TextView
            android:layout_height="wrap_content"
            android:id="@+id/secondpanel"
            android:paddingTop="10dip"
            android:text="my second panel"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:text >
        </TextView>
    </LinearLayout>
</ViewFlipper> 

  正如你所看到的,我添加了1個ViewFlipper,2 個LinearLayout並為每個內部布局simpletextview,建立一個適當的切換布局第一步是很有必要,你可以自定義你想要的兩個內布局風格,以及如果你想要添加工具欄萊切換內部布局。

  第二步、Java 代碼(通過觸摸來切換布局)

  從src/中打開你的main class,並且在類的開始部分聲明兩個變量:

private ViewFlipper vf;  
    private float oldTouchValue;

  第一個變量 VF用於constrol ViewFlipper,第二個變量時觸摸事件所需要的。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ....
        vf = (ViewFlipper) findViewById(R.id.switchlayout);
     }  

  我們需要聲明viewflipper。

  第三步:touch Event

  移動電話最重要的特點之一就是觸摸屏系統,就像iPhone應用程序或其他設備,用戶更喜歡用他們的手指通過接觸在不同的Actives之間進行切換。

  在Android開發中,為了附加一個觸摸事件你可以做兩件事情:“實現touchlistener”通過重寫主函數來聲明onTouchEvent。在這個例子中,我們用到的是第二種情況。

@Override
    public boolean onTouchEvent(MotionEvent touchevent) {
        switch (touchevent.getAction())
        {
            case MotionEvent.ACTION_DOWN:
            {
                oldTouchValue = touchevent.getX();
                break;
            }
            case MotionEvent.ACTION_UP:
            {
                if(this.searchOk==false) return false;
                float currentX = touchevent.getX();
                if (oldTouchValue < currentX)
                {
                    vf.setInAnimation(AnimationHelper.inFromLeftAnimation());
                    vf.setOutAnimation(AnimationHelper.outToRightAnimation());
                    vf.showNext();
                }
                if (oldTouchValue > currentX)
                {
                    vf.setInAnimation(AnimationHelper.inFromRightAnimation());
                    vf.setOutAnimation(AnimationHelper.outToLeftAnimation());
                    vf.showPrevious();
                }
            break;
            }
        }
        return false;
    } 

  正如你可以看到,當用戶進行第一次觸摸時,設備將會用他的手指的X坐標填補浮點變量(oldTouchValue),那麼當用戶將他的手指拿開時,我會檢查最新的位置,以決定是否在用戶是否要到下一個或上一個位置(oldTouchValue currentX)。要改變布局的代碼是相同的,但如果用戶想要去下一個位置或前一個位置時我會用不同的動畫,為了解釋這個動畫和 AnimationHelper,示例代碼如下:

//for the previous movement
    public static Animation inFromRightAnimation() {
        Animation inFromRight = new TranslateAnimation(
        Animation.RELATIVE_TO_PARENT,  +1.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
        Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
        );
        inFromRight.setDuration(350);
        inFromRight.setInterpolator(new AccelerateInterpolator());
        return inFromRight;
        }
    public static Animation outToLeftAnimation() {
        Animation outtoLeft = new TranslateAnimation(
         Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  -1.0f,
         Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
        );
        outtoLeft.setDuration(350);
        outtoLeft.setInterpolator(new AccelerateInterpolator());
        return outtoLeft;
        }    
    // for the next movement
    public static Animation inFromLeftAnimation() {
        Animation inFromLeft = new TranslateAnimation(
        Animation.RELATIVE_TO_PARENT,  -1.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
        Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
        );
        inFromLeft.setDuration(350);
        inFromLeft.setInterpolator(new AccelerateInterpolator());
        return inFromLeft;
        }
    public static Animation outToRightAnimation() {
        Animation outtoRight = new TranslateAnimation(
         Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  +1.0f,
         Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
        );
        outtoRight.setDuration(350);
        outtoRight.setInterpolator(new AccelerateInterpolator());
        return outtoRight;
        }

  你可以決定把這些方法放在一個靜態類中,或在類中進行聲明。

  結論:

  現在你有基類和事件由右至左(show.previous),從左至右(show.next),來捕捉觸摸運動。一個簡單的代碼解釋了4個動畫運動和一個簡單的布局。當有兩個以上的布局和更復雜的內容時我會建議做進一步測試。

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