Android ViewFlipper 手勢觸摸案例

來源:互聯網
上載者:User

廣大博友,看過後幫忙頂頂,謝謝大家!!!

轉載請註明: http://blog.csdn.net/richway2010/archive/2011/06/29/6574987.aspx

博主:各位博友,網友們,大家網上好!歡迎光臨本部落格。 歡迎多多交流,多提意見,互相學習,互相進步,我們的口號是:好好學習,天天向上。】

直接進入主題,先來看看效果:

 

從右往左觸控螢幕幕:

 

實現:main.xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout android:layout_height="fill_parent"<br /> android:layout_width="fill_parent"<br /> android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"<br /> ><br /><ViewFlipper android:id="@+id/flipper"<br /> android:layout_height="fill_parent" android:layout_width="fill_parent"><br /><include android:id="@+id/firstlayout" layout="@layout/left"/><br /><include android:id="@+id/secondlayout" layout="@layout/center"/><br /><include android:id="@+id/thirdlayout" layout="@layout/right"/><br /></ViewFlipper><br /></LinearLayout>

 

center.xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout android:gravity="center_vertical"<br /> android:layout_height="fill_parent"<br /> android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"><br /> <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/a3"><br /></ImageView></LinearLayout>

 

left.xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout android:gravity="center_vertical"<br />android:layout_height="fill_parent" android:layout_width="fill_parent"<br />xmlns:android="http://schemas.android.com/apk/res/android"><br /><ImageView android:layout_height="wrap_content"<br />android:layout_width="wrap_content" android:src="@drawable/a2"><br /></ImageView><br /></LinearLayout>

 

right.xml

<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout android:gravity="center_vertical"<br />android:layout_height="fill_parent" android:layout_width="fill_parent"<br />xmlns:android="http://schemas.android.com/apk/res/android"><br /><ImageView android:layout_height="wrap_content"<br />android:layout_width="wrap_content" android:src="@drawable/a1"></ImageView><br /></LinearLayout>

 

主設定檔:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="org.flipper"<br /> android:versionCode="1"<br /> android:versionName="1.0"><br /> <uses-sdk android:minSdkVersion="8" /></p><p> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".ViewFlipperDemoActivity"<br /> android:label="@string/app_name"><br /> <intent-filter><br /> <action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br /> </intent-filter><br /> </activity></p><p> </application><br /></manifest>

 

主類:ViewFlipperDemoActivity.java

import android.app.Activity;<br />import android.os.Bundle;<br />import android.view.GestureDetector;<br />import android.view.MotionEvent;<br />import android.view.View;<br />import android.view.GestureDetector.OnGestureListener;<br />import android.view.View.OnTouchListener;<br />import android.view.animation.AccelerateInterpolator;<br />import android.view.animation.Animation;<br />import android.view.animation.TranslateAnimation;<br />import android.widget.ViewFlipper;<br />public class ViewFlipperDemoActivity extends Activity implements OnGestureListener,OnTouchListener{<br />private ViewFlipper mFlipper;<br />GestureDetector mGestureDetector;<br />private int mCurrentLayoutState;<br />private static final int FLING_MIN_DISTANCE = 120;<br />private static final int FLING_MIN_VELOCITY = 240;</p><p>@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);<br />setContentView(R.layout.main);<br />mFlipper = (ViewFlipper) findViewById(R.id.flipper);<br />//註冊一個用於手勢識別的類<br />mGestureDetector = new GestureDetector(this);<br />//給mFlipper設定一個listener<br />mFlipper.setOnTouchListener(this);<br />mCurrentLayoutState = 0;<br />//允許長按住ViewFlipper,這樣才能識別拖動等手勢<br />mFlipper.setLongClickable(true);</p><p>/**<br /> * 定義從右側進入的動畫效果<br /> * @return<br /> */<br />protected Animation inFromRightAnimation() {<br />Animation inFromRight = new TranslateAnimation(<br />Animation.RELATIVE_TO_PARENT, +1.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f);<br />inFromRight.setDuration(500);<br />inFromRight.setInterpolator(new AccelerateInterpolator());<br />return inFromRight;<br />}</p><p>/**<br /> * 定義從左側退出的動畫效果<br /> * @return<br /> */<br />protected Animation outToLeftAnimation() {<br />Animation outtoLeft = new TranslateAnimation(<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, -1.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f);<br />outtoLeft.setDuration(500);<br />outtoLeft.setInterpolator(new AccelerateInterpolator());<br />return outtoLeft;<br />}</p><p>/**<br /> * 定義從左側進入的動畫效果<br /> * @return<br /> */<br />protected Animation inFromLeftAnimation() {<br />Animation inFromLeft = new TranslateAnimation(<br />Animation.RELATIVE_TO_PARENT, -1.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f);<br />inFromLeft.setDuration(500);<br />inFromLeft.setInterpolator(new AccelerateInterpolator());<br />return inFromLeft;<br />}</p><p>/**<br /> * 定義從右側退出時的動畫效果<br /> * @return<br /> */<br />protected Animation outToRightAnimation() {<br />Animation outtoRight = new TranslateAnimation(<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, +1.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f,<br />Animation.RELATIVE_TO_PARENT, 0.0f);<br />outtoRight.setDuration(500);<br />outtoRight.setInterpolator(new AccelerateInterpolator());<br />return outtoRight;<br />}</p><p>public boolean onDown(MotionEvent e) {<br />// TODO Auto-generated method stub<br />return false;<br />}</p><p>/*<br /> * 使用者按下觸控螢幕、快速移動後鬆開即觸發這個事件<br /> * e1:第1個ACTION_DOWN MotionEvent<br /> * e2:最後一個ACTION_MOVE MotionEvent<br /> * velocityX:X軸上的移動速度,像素/秒<br /> * velocityY:Y軸上的移動速度,像素/秒<br /> * 觸發條件 :<br /> * X軸的座標位移大於FLING_MIN_DISTANCE,且移動速度大於FLING_MIN_VELOCITY個像素/秒<br /> */<br />public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,<br />float velocityY) {<br />if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE<br /> && Math.abs(velocityX) > FLING_MIN_VELOCITY) {<br /> // 當像左側滑動的時候<br />//設定View進入螢幕時候使用的動畫<br />mFlipper.setInAnimation(inFromRightAnimation());<br />//設定View退出螢幕時候使用的動畫<br />mFlipper.setOutAnimation(outToLeftAnimation());<br />mFlipper.showNext();<br /> } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE<br /> && Math.abs(velocityX) > FLING_MIN_VELOCITY) {<br /> // 當像右側滑動的時候<br />mFlipper.setInAnimation(inFromLeftAnimation());<br />mFlipper.setOutAnimation(outToRightAnimation());<br />mFlipper.showPrevious();<br /> }<br />return false;<br />}<br />public boolean onTouch(View v, MotionEvent event) {<br />// 將觸屏事件交給手勢識別類去處理<br />return mGestureDetector.onTouchEvent(event);<br />}<br />}<br />

 

希望對你有協助,謝謝

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.