zoukankan      html  css  js  c++  java
  • 滑动切换界面---单Activity

    PS:该方式,只是Activity里面的layout在切换,Activity始终只有一个MainActivity,∴ 控件在MainActivity中都可以得到,因此 不涉及 Activity间传值的问题。

    一、检测 手指的滑动

    1、

    实现 Activity 的 onTouchEvent 事件:

    	@Override
    	public boolean onTouchEvent(MotionEvent event)
    	{
    		return super.onTouchEvent(event);
    	}
    

    2、

    2.1、实现接口 android.view.GestureDetector.OnGestureListener

    public class MainActivity extends Activity implements android.view.GestureDetector.OnGestureListener
    

    2.2、实现 该接口的 6个函数

    	@Override
    	public boolean onDown(MotionEvent e) {
    		// TODO Auto-generated method stub
    		return false;
    	}
    
    	@Override
    	public void onShowPress(MotionEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public boolean onSingleTapUp(MotionEvent e) {
    		// TODO Auto-generated method stub
    		return false;
    	}
    
    	@Override
    	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
    			float distanceY) {
    		// TODO Auto-generated method stub
    		return false;
    	}
    
    	@Override
    	public void onLongPress(MotionEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    			float velocityY) {
    		// TODO Auto-generated method stub
    		return false;
    	}
    

     这里,别的 函数都不用管,只要关注 方法onFling 就可以了。

     3、编程

    3.1、MainActivity 添加私有变量:

    private GestureDetector FgestureDetector;
    

    3.2、MainActivity 的 onCreate 中创建 GestureDetector对象:

    	@Override
    	protected void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		
    		FgestureDetector = new GestureDetector(MainActivity.this, this);
    	}
    

    3.3、MainActivity 的 onTouchEvent 中调用GestureDetector.onTouchEvent :

    	@Override
    	public boolean onTouchEvent(MotionEvent event)
    	{
    		return FgestureDetector.onTouchEvent(event);
    		//return super.onTouchEvent(event);
    	}
    

    3.4、onFling 的实现改成如下:

    	@Override
    	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    	{
    		float fDelta = 120;
    		if (e2.getX() - e1.getX() > fDelta)
    		{
    			//new AlertDialog.Builder(this).setTitle("Android 提示").setMessage("==> ==>").show();
    			Toast.makeText(getApplication(), "==> ==>", Toast.LENGTH_LONG).show();
    			
    			return true;
    		}
    		else if (e2.getX() - e1.getX() < (-fDelta))
    		{
    			//new AlertDialog.Builder(this).setTitle("Android 提示").setMessage("<== <==").show();
    			Toast.makeText(getApplication(), "<== <==", Toast.LENGTH_LONG).show();
    			
    			return true;
    		}
    		return true;
    		//return false;
    	}
    

     4、这样就能检测到 手指的滑动了。

     二、页面的切换:

    1、MainActivity 中添加 变量:

    private ViewFlipper Fvf01;
    

    2、MainActivity 的 onCreate事件中创建 ViewFlipper 对象

    Fvf01 = (ViewFlipper) this.findViewById(R.id.viewFlipper1);
    

    3、MainActivity 的onTouchEvent事件中添加代码,使之变成如下形式:

    	@Override
    	public boolean onTouchEvent(MotionEvent event)
    	{
    		Fvf01.stopFlipping();
    		Fvf01.setAutoStart(false);	
    		return FgestureDetector.onTouchEvent(event);
    	}
    

    4、MainActivity 的 onFling事件中添加代码,使之变成如下形式:

     1 @Override
     2     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
     3     {
     4         float fDelta = 120;
     5         if (e2.getX() - e1.getX() > fDelta)
     6         {
     7             //new AlertDialog.Builder(this).setTitle("Android 提示").setMessage("==> ==>").show();
     8             Toast.makeText(getApplication(), "==> ==>", Toast.LENGTH_LONG).show();
     9              
    10             Animation rInAnim = AnimationUtils.loadAnimation(this, R.anim.push_right_in);
    11             Animation rOutAnim = AnimationUtils.loadAnimation(this, R.anim.push_right_out);
    12      
    13             Fvf01.setInAnimation(rInAnim);
    14             Fvf01.setOutAnimation(rOutAnim);
    15             Fvf01.showPrevious();
    16             return true;
    17         }
    18         else if (e2.getX() - e1.getX() < (-fDelta))
    19         {
    20             //new AlertDialog.Builder(this).setTitle("Android 提示").setMessage("<== <==").show();
    21             Toast.makeText(getApplication(), "<== <==", Toast.LENGTH_LONG).show();
    22              
    23             Animation lInAnim = AnimationUtils.loadAnimation(this, R.anim.push_left_in);
    24             Animation lOutAnim = AnimationUtils.loadAnimation(this, R.anim.push_left_out);
    25      
    26             Fvf01.setInAnimation(lInAnim);
    27             Fvf01.setOutAnimation(lOutAnim);
    28             Fvf01.showNext();
    29             return true;
    30         }
    31         //return true;
    32         return false;
    33     }

    5、项目-->res -->新建文件夹"anim" --> 里面放入4个xml文件:

      push_left_in.xml、push_left_out.xml、push_right_in.xml、push_right_out.xml

    它们的内容分别为:

    5.1、push_left_in.xml :

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <set xmlns:android="http://schemas.android.com/apk/res/android" >
     3     <translate
     4         android:duration="500"
     5         android:fromXDelta="100%p"
     6         android:toXDelta="0" />
     7 
     8     <alpha
     9         android:duration="500"
    10         android:fromAlpha="0.1"
    11         android:toAlpha="1.0" />
    12 </set>

    5.2、push_left_out.xml :

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <set xmlns:android="http://schemas.android.com/apk/res/android" >
     3     <translate
     4         android:duration="500"
     5         android:fromXDelta="0"
     6         android:toXDelta="-100%p" />
     7 
     8     <alpha
     9         android:duration="500"
    10         android:fromAlpha="1.0"
    11         android:toAlpha="0.1" />
    12 </set>

    5.3、push_right_in.xml :

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <set xmlns:android="http://schemas.android.com/apk/res/android" >
     3     <translate
     4         android:duration="500"
     5         android:fromXDelta="-100%p"
     6         android:toXDelta="0" />
     7 
     8     <alpha
     9         android:duration="500"
    10         android:fromAlpha="0.1"
    11         android:toAlpha="1.0" />
    12 </set>

    5.4、push_right_out.xml :

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <set xmlns:android="http://schemas.android.com/apk/res/android" >
     3     <translate
     4         android:duration="500"
     5         android:fromXDelta="0"
     6         android:toXDelta="100%p" />
     7 
     8     <alpha
     9         android:duration="500"
    10         android:fromAlpha="1.0"
    11         android:toAlpha="0.1" />
    12 </set>

     三、修改界面layout

    1、在 项目-->res-->layout 目录下,新建2个界面xml文件:

      zc_layout_1.xml、zc_layout_2.xml

    内容为:

    1.1、zc_layout_1.xml :

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" >
     5 
     6     <TextView
     7         android:id="@+id/textView1"
     8         android:layout_width="wrap_content"
     9         android:layout_height="wrap_content"
    10         android:layout_alignParentRight="true"
    11         android:layout_alignParentTop="true"
    12         android:text="zc_layout_1" />
    13 
    14     <EditText
    15         android:id="@+id/editText1"
    16         android:layout_width="wrap_content"
    17         android:layout_height="wrap_content"
    18         android:layout_alignParentLeft="true"
    19         android:layout_alignParentRight="true"
    20         android:layout_below="@+id/textView1"
    21         android:ems="10"
    22         android:gravity="center_vertical|top"
    23         android:inputType="textMultiLine"
    24         android:minLines="10" >
    25 
    26         <requestFocus />
    27     </EditText>
    28 
    29 
    30 </RelativeLayout>

    1.2、zc_layout_2.xml :

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" >
     5 
     6     <TextView
     7         android:id="@+id/textView1"
     8         android:layout_width="wrap_content"
     9         android:layout_height="wrap_content"
    10         android:layout_alignParentLeft="true"
    11         android:layout_alignParentTop="true"
    12         android:text="zc_layout_2" />
    13 
    14 
    15 
    16 </RelativeLayout>

    2、

    原来的 activity_main.xml 内容为:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context="com.example.slideandroidz.MainActivity" >
    10 
    11     <TextView
    12         android:layout_width="wrap_content"
    13         android:layout_height="wrap_content"
    14         android:text="@string/hello_world" />
    15 
    16 </RelativeLayout>

    现在 修改为:

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context="com.example.slideandroidz.MainActivity" >
    10 
    11     <ViewFlipper
    12         android:id="@+id/viewFlipper1"
    13         android:layout_width="match_parent"
    14         android:layout_height="match_parent" >
    15 
    16         <include layout="@layout/zc_layout_1" />
    17 
    18         <include layout="@layout/zc_layout_2" />
    19         
    20     </ViewFlipper>
    21 
    22 </RelativeLayout>

    这样修改后, activity_main.xml 就不负责显示具体的控件了,它只是用来负责容纳 zc_layout_1和zc_layout_2。

    然后切换的时候,是 zc_layout_1和zc_layout_2 在切换,activity_main.xml 并不参与其中。

    100、

    我的代码 保存于:百度云 -->codeskill33 -->“全部文件 > Code__Demo_Test > Android手指滑动_切换界面_单Activity” --> SlideAndroidZ

    PS:完整的代码的例子:

      1 package com.example.commandandroidz;
      2 
      3 import android.app.Activity;
      4 import android.os.Bundle;
      5 import android.view.GestureDetector;
      6 import android.view.Menu;
      7 import android.view.MenuItem;
      8 import android.view.MotionEvent;
      9 import android.view.animation.Animation;
     10 import android.view.animation.AnimationUtils;
     11 import android.widget.ViewFlipper;
     12 
     13 public class MainActivity extends Activity implements android.view.GestureDetector.OnGestureListener
     14 {
     15 
     16     @Override
     17     protected void onCreate(Bundle savedInstanceState)
     18     {
     19         super.onCreate(savedInstanceState);
     20         setContentView(R.layout.activity_main);
     21         
     22         
     23         FgestureDetector = new GestureDetector(MainActivity.this, this);
     24         Fvf01 = (ViewFlipper) this.findViewById(R.id.viewFlipper1);
     25     }
     26 
     27     @Override
     28     public boolean onCreateOptionsMenu(Menu menu) {
     29         // Inflate the menu; this adds items to the action bar if it is present.
     30         getMenuInflater().inflate(R.menu.main, menu);
     31         return true;
     32     }
     33 
     34     @Override
     35     public boolean onOptionsItemSelected(MenuItem item) {
     36         // Handle action bar item clicks here. The action bar will
     37         // automatically handle clicks on the Home/Up button, so long
     38         // as you specify a parent activity in AndroidManifest.xml.
     39         int id = item.getItemId();
     40         if (id == R.id.action_settings) {
     41             return true;
     42         }
     43         return super.onOptionsItemSelected(item);
     44     }
     45 
     46 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
     47 // *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
     48     
     49     @Override
     50     public boolean onTouchEvent(MotionEvent event)
     51     {
     52         Fvf01.stopFlipping();
     53         Fvf01.setAutoStart(false); 
     54         return FgestureDetector.onTouchEvent(event);
     55         //return super.onTouchEvent(event);
     56     }
     57     
     58     // *** *** ***
     59     
     60     private GestureDetector FgestureDetector;
     61     private ViewFlipper Fvf01;
     62     
     63     @Override
     64     public boolean onDown(MotionEvent e)
     65     {return false;}
     66      
     67     @Override
     68     public void onShowPress(MotionEvent e)
     69     {}
     70      
     71     @Override
     72     public boolean onSingleTapUp(MotionEvent e)
     73     {return false;}
     74      
     75     @Override
     76     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
     77     {return false;}
     78      
     79     @Override
     80     public void onLongPress(MotionEvent e)
     81     {}
     82      
     83     @Override
     84     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
     85     {
     86         float fDelta = 120;
     87         if (e2.getX() - e1.getX() > fDelta)
     88         {
     89             //new AlertDialog.Builder(this).setTitle("Android 提示").setMessage("==> ==>").show();
     90             //Toast.makeText(getApplication(), "==> ==>", Toast.LENGTH_LONG).show();
     91              
     92             Animation rInAnim = AnimationUtils.loadAnimation(this, R.anim.push_right_in);
     93             Animation rOutAnim = AnimationUtils.loadAnimation(this, R.anim.push_right_out);
     94      
     95             Fvf01.setInAnimation(rInAnim);
     96             Fvf01.setOutAnimation(rOutAnim);
     97             Fvf01.showPrevious();
     98             return true;
     99         }
    100         else if (e2.getX() - e1.getX() < (-fDelta))
    101         {
    102             //new AlertDialog.Builder(this).setTitle("Android 提示").setMessage("<== <==").show();
    103             //Toast.makeText(getApplication(), "<== <==", Toast.LENGTH_LONG).show();
    104              
    105             Animation lInAnim = AnimationUtils.loadAnimation(this, R.anim.push_left_in);
    106             Animation lOutAnim = AnimationUtils.loadAnimation(this, R.anim.push_left_out);
    107      
    108             Fvf01.setInAnimation(lInAnim);
    109             Fvf01.setOutAnimation(lOutAnim);
    110             Fvf01.showNext();
    111             return true;
    112         }
    113         //return true;
    114         return false;
    115     }
    116 }

    PS:

     1         EditText edtMsg01 = (EditText)findViewById(R.id.editMsg01);
     2         edtMsg01.setOnTouchListener(new View.OnTouchListener()
     3         {
     4             @Override
     5             public boolean onTouch(View v, MotionEvent event)
     6             {
     7                 Fvf01.stopFlipping();
     8                 Fvf01.setAutoStart(false); 
     9                 return FgestureDetector.onTouchEvent(event);
    10                 //return false;
    11             }
    12         });

    B

  • 相关阅读:
    C# 使用IComparer自定义List类的排序方案
    ubuntu的vim模式
    linux系统目录结构与层级命令使用
    GitHub托管项目
    应用TortoiseGit为github账号添加SSH keys
    PHP中利用PHPMailer配合QQ邮箱实现发邮件
    QQ互联 网站应用接入
    dedecms 中变量函数
    WebSocket 协议
    前端组件库
  • 原文地址:https://www.cnblogs.com/codeskilla/p/4941567.html
Copyright © 2011-2022 走看看