小试安卓滑屏效果

在做一个小项目中感觉滑屏的效果很棒,于是就上网查了一下,大致分三种,有的用 Scroller类来实现,有的用ViewPager来实现,可对初学Android的我来说都看的一头雾水。正在纠结的时候看到了用GestureDetector绑定ViewFlipper来实现,这种方法对我来说应该算是最实用的了,为什么?因为代码少,可移植性强,再说了我一惯都是一个十足的拿来主义,又不打算做一个很牛逼的程序猿,学这个只是为了实现我的一些小目的,仅此而已,所以太深层次的东西我就不去探究了,实用为主嘛!

闲话少说看代码吧! 这段很直观,就是创建三个视图,做为三个屏的界面,这段代码的重点是 ViewFlipper的运用。

   
     

   
   

    
    
     
	    
	    
     
     
	        
      
      
	    
     
      
	    
	    
     
     
	        
      
      
	    
     
      
	    
	    
     
     
	        
      
      
	    
     
      

    
    
    


   
     
接下来就是创建四个手势的动作了,很简单,在工程列表的res目录下创建一个名为anim的文件夹,然后分别建立四个XML文件,android:duration="500"  是滑屏动作时间为500毫秒,你懂的!
res/anim/push_left_in.xml

   
     

   
     
    
    
      
  
    
    
      

   
     

res/anim/push_left_out.xml

   
     

   
     
    
    
      
  
    
    
      

   
     

res/anim/push_right_in.xml

   
     

   
     
    
    
      
  
    
    
      

   
     

res/anim/push_right_out.xml

   
     

   
     
    
    
      
  
    
    
      

   
     

接下来就来完成我们最后一步也是最主要的一步,编辑  MainActivity,还是直接上代码吧。这句我的源代码中就这样显示的gestureDetector = new GestureDetector(this);新手不懂,如有大神给兄弟我讲讲不胜感激。
import android.app.Activity;  
import android.os.Bundle;  
import android.view.GestureDetector;  
import android.view.MotionEvent;  
import android.view.animation.Animation;  
import android.view.animation.AnimationUtils;  
import android.widget.ViewFlipper;  
  
public class MainActivity extends Activity implements android.view.GestureDetector.OnGestureListener {  

    private GestureDetector gestureDetector = null;  
    private ViewFlipper viewFlipper = null;  
    private Activity mActivity = null;  
  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        mActivity = this;  
  
        viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);  
        gestureDetector = new GestureDetector(this);    // 声明检测手势事件  
        viewFlipper.setDisplayedChild(-1); //默认初始视图为第一个(如果不要这行的话我的测试结果是默认显示第二个视图)
        viewFlipper.showNext();//根据手势翻页
    }  
  
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        return gestureDetector.onTouchEvent(event);         // 注册手势事件  
    }  
  
    @Override  
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {  
        if (e2.getX() - e1.getX() > 120) {            // 从左向右滑动(左进右出)  
            Animation rInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_in);  // 向右滑动左侧进入的渐变效果(alpha  0.1 -> 1.0)  
            Animation rOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_out); // 向右滑动右侧滑出的渐变效果(alpha 1.0  -> 0.1)  
  
            viewFlipper.setInAnimation(rInAnim);  
            viewFlipper.setOutAnimation(rOutAnim);  
            viewFlipper.showPrevious();  
            return true;  
        } else if (e2.getX() - e1.getX() < -120) {        // 从右向左滑动(右进左出)  
            Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_in);       // 向左滑动左侧进入的渐变效果(alpha 0.1  -> 1.0)  
            Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_out);     // 向左滑动右侧滑出的渐变效果(alpha 1.0  -> 0.1)  
  
            viewFlipper.setInAnimation(lInAnim);  
            viewFlipper.setOutAnimation(lOutAnim);  
            viewFlipper.showNext();  
            return true;  
        }  
        return true;  
    }  
  
    @Override  
    public boolean onDown(MotionEvent e) {  
        return false;  
    }  
  
    @Override  
    public void onLongPress(MotionEvent e) {  
    }  
  
    @Override  
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {  
        return false;  
    }  
  
    @Override  
    public void onShowPress(MotionEvent e) {  
    }  
  
    @Override  
    public boolean onSingleTapUp(MotionEvent e) {  
        return false;  
    }  
}
通过测试完全可以实现滑屏实现视图的切换,关于用 GestureDetector和 ViewFlipper组合来实现滑屏的例子网上很多,我的这些代码基本都是拿来主义,后来通过自己不断修改和测试来一点点实现目标。这里开始最困惑我的就是视图的载入,现在看起来就用一行 viewFlipper.showNext()就可以实现,最蛋疼的是我被其它实例中的 addView()把思路导偏了,好在是先把人家的代码从头到尾看了一下,要不现在也没功夫在谈我扯蛋的经验,没办法谁让咱没基础完全是拿来主义呢,哈哈。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值