实现了在android实现左右滑动切换界面的效果

这是实现了在android实现左右滑动切换界面的效果,该效果的源码下载,请到源码天堂下载吧,喜欢的朋友可以研究一下。

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layContain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" 
	android:background="@drawable/bg"
    >
   <!-- android:background="#FFC0CB"-->
   
   <FrameLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"   
    
   >
   <LinearLayout 
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:orientation="horizontal"    
   >
    <LinearLayout
        android:id="@+id/layFirst"
        android:layout_width="400px"
        android:layout_height="fill_parent"
        android:orientation="vertical" 
        android:layout_marginBottom="50dp"
        >
        
       
    </LinearLayout>
    
    <LinearLayout
        android:id="@+id/laySec"
        android:layout_width="400px"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

       
    </LinearLayout>

    <LinearLayout
        android:id="@+id/layThird"
        android:layout_width="400px"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

       
    </LinearLayout>   
    <LinearLayout
        android:id="@+id/layFourth"
        android:layout_width="400px"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        
    </LinearLayout>  
    </LinearLayout>  
    <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"   
    android:layout_gravity="center_horizontal|bottom"  
    android:layout_marginBottom="40dp"
    >
      <TextView 
      android:id="@+id/roll_dot1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="."
    android:textSize="50dp"
    android:textColor="#ffffff"
    />
    <TextView 
        android:id="@+id/roll_dot2"
     android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="."
    android:textSize="50dp"
    android:textColor="#000000"
    />  
    <TextView 
        android:id="@+id/roll_dot3"
     android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="."
    android:textSize="50dp"
    android:textColor="#000000"
    />  
    <TextView 
        android:id="@+id/roll_dot4"
     android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="."
    android:textSize="50dp"
    android:textColor="#000000"
    />  
    </LinearLayout>
    </FrameLayout>
</LinearLayout>

代码

package com.marsor.desk;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

public class MarsorDeskActivity extends Activity {
	GestureDetector mGestureDetector;
	LinearLayout layFirst;
	LinearLayout laySec;
	LinearLayout layThird;
	LinearLayout layFourth;
	LinearLayout layContain;
	//当前显示的layout
	LinearLayout layCur;
	//左边的layout
	LinearLayout layLeft;
	//右边的layout
	LinearLayout layRight;
	int screenWidth;
	ArrayList<MyAppInfo> mApplications = new ArrayList<MyAppInfo>();
	
	TextView roll_dot1,roll_dot2,roll_dot3,roll_dot4;
	
	ArrayList<String> packagNameList ;
	private final int MENU_EXIT = 01;
	private MyReceiver receiver;
		
	private OnTouchListener myTouch = new OnTouchListener(){

    	
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			return mGestureDetector.onTouchEvent(event);
		}
    	
    };
    
	@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initpackagNameList();
        //监听系统新安装程序的广播
        receiver = new MyReceiver();
        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
        filter.addDataScheme("package");    //必须添加这项,否则拦截不到广播
        registerReceiver(receiver, filter);
        
        layContain = (LinearLayout) this.findViewById(R.id.layContain);
        layFirst = (LinearLayout) this.findViewById(R.id.layFirst);
        laySec = (LinearLayout) this.findViewById(R.id.laySec);
        layThird = (LinearLayout) this.findViewById(R.id.layThird);
        layFourth = (LinearLayout) this.findViewById(R.id.layFourth);
        
        roll_dot1 = (TextView) findViewById(R.id.roll_dot1);
        roll_dot2 = (TextView) findViewById(R.id.roll_dot2);
        roll_dot3 = (TextView) findViewById(R.id.roll_dot3);
        roll_dot4 = (TextView) findViewById(R.id.roll_dot4);
        
        layCur = layFirst;
        layLeft = null;
        layRight = laySec;
        
        layFirst.setOnTouchListener(myTouch);
        laySec.setOnTouchListener(myTouch);
        layThird.setOnTouchListener(myTouch);
        layFourth.setOnTouchListener(myTouch);
        
        //设置宽度
        screenWidth = getWindowManager().getDefaultDisplay().getWidth();
        layFirst.getLayoutParams().width = screenWidth;
        laySec.getLayoutParams().width = screenWidth;
        layThird.getLayoutParams().width = screenWidth;
        layFourth.getLayoutParams().width = screenWidth;
        
         mGestureDetector = new GestureDetector(this, new OnGestureListener(){
			@Override
			public boolean onDown(MotionEvent e) {
				return true;
			}

			@Override
			public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
				int x = (int) (e2.getX() - e1.getX());
				
				//判断方向
				boolean dir = x>0;//如果大于0,为true,说明向右移动,直接将其前一个视图的marginleft设置成0,如果是向左移动,则直接将maringleft试着称宽度的负数
				if(dir){
					if(layLeft == null)return false;
					LinearLayout.LayoutParams llp = (LayoutParams) layLeft.getLayoutParams();
			
					TranslateAnimation anim1 = new TranslateAnimation(llp.leftMargin,0,0,0);
					anim1.setDuration(500l);
					layLeft.startAnimation(anim1);
					
					//layLeft.setAnimation(anim);
					llp.setMargins(0, 0, 0, 0);
					layLeft.setLayoutParams(llp);
					if(layLeft == layFirst){
						layLeft = null;
						layCur = layFirst;
						layRight =laySec ;
						//设置屏幕下方的小点随着页面的切换而改变
						roll_dot2.setTextColor(Color.BLACK);
						roll_dot1.setTextColor(Color.WHITE);
					}else if(layLeft == laySec){
						layLeft = layFirst;
						layCur = laySec;
						layRight =layThird ;
						roll_dot3.setTextColor(Color.BLACK);
						roll_dot2.setTextColor(Color.WHITE);
					}else if(layLeft == layThird){
						layLeft = laySec;
						layCur = layThird;
						layRight =layFourth ;
						roll_dot4.setTextColor(Color.BLACK);
						roll_dot3.setTextColor(Color.WHITE);
					}
				}else{
					if(layRight == null)return false;
					LinearLayout.LayoutParams llp = (LayoutParams) layCur.getLayoutParams();
					int width = layCur.getWidth();
					TranslateAnimation anim = new TranslateAnimation(width,0,0,0);
					
					anim.setDuration(500l);
					layRight.startAnimation(anim);
					
					llp.setMargins(-width, 0, 0, 0);
					layCur.setLayoutParams(llp);
					if(layCur == layFirst){
						layLeft = layFirst;
						layCur = laySec;
						layRight =layThird ;
						roll_dot1.setTextColor(Color.BLACK);
						roll_dot2.setTextColor(Color.WHITE);
					}else if(layCur == laySec){
						layLeft = laySec;
						layCur = layThird;
						layRight = layFourth ;
						roll_dot2.setTextColor(Color.BLACK);
						roll_dot3.setTextColor(Color.WHITE);
					}else if(layCur == layThird){
						layLeft = layThird;
						layCur = layFourth;
						layRight = null ;
						roll_dot3.setTextColor(Color.BLACK);
						roll_dot4.setTextColor(Color.WHITE);
					}
				}

				return true;
			}
			@Override
			public void onLongPress(MotionEvent e) {
				// TODO Auto-generated method stub
				
			}
			@Override
			public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
				// 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;
			}
        	
        });
}



原文地址:https://www.cnblogs.com/suncoolcat/p/3331379.html