你的位置:首页 > 软件开发 > 操作系统 > Android 实现 IOS相机滑动控件

Android 实现 IOS相机滑动控件

发布时间:2016-07-30 23:00:10
IOS相比于Android,动画效果是一方面优势,IOS相机切换时滑动的动画很不错,看着是有一个3D的效果,而且变化感觉很自然。Android也可以通过Graphics下面的Camera可以实现3D效果,开始尝试着用这个做了一下,效果不理想,滑动之后各组文字之间的距离就变了,从立 ...

Android 实现 IOS相机滑动控件

   IOS相比于Android,动画效果是一方面优势,IOS相机切换时滑动的动画很不错,看着是有一个3D的效果,而且变化感觉很自然。Android也可以通过Graphics下面的Camera可以实现3D效果,开始尝试着用这个做了一下,效果不理想,滑动之后各组文字之间的距离就变了,从立体空间来说这是合逻辑的,但是看着很别捏。IOS相机的滑动效果文字之间的间隔在滑动的时候是不变的。

  后面通过调整TextView X方向的scale使文字看着紧凑一点,然后通过计算的距离的方式,在滑动的时候保持各组文字之间的间隔一致,最后实现的效果还是和IOS的有一定的差距。先上个效果图的。

 

Android 实现 IOS相机滑动控件

 下面逐步来说下怎么实现:

  MainaActivity.java:

  往自定义的控件加了6个TextView,对应各个模式。

  这里面还实现了一个手势监听,来识别滑动事件。对动画做了一些限制,角度小于30度,滑动距离大于15才能生效。

 1 package com.example.androidcustomnview; 2  3 import android.app.Activity; 4 import android.graphics.Color; 5 import android.os.Bundle; 6 import android.util.Log; 7 import android.view.GestureDetector; 8 import android.view.GestureDetector.OnGestureListener; 9 import android.view.View; 10 import android.view.View.OnTouchListener; 11 import android.view.MotionEvent; 12 import android.view.TextureView; 13 import android.view.ViewGroup; 14 import android.view.animation.Animation; 15 import android.view.animation.Animation.AnimationListener; 16 import android.view.animation.AnimationSet; 17 import android.view.animation.TranslateAnimation; 18 import android.widget.FrameLayout; 19 import android.widget.LinearLayout; 20 import android.widget.RelativeLayout; 21 import android.widget.TextView; 22  23 public class MainActivity extends Activity implements OnTouchListener{ 24  25   private static final String TAG = "MainActivity.TAG"; 26   CustomViewL mCustomViewL; 27   String[] name = new String[] {"延时摄影","慢动作","视频","拍照","正方形","全景"}; 28  29   GestureDetector mGestureDetector; 30   RelativeLayout rootView; 31   @Override 32   protected void onCreate(Bundle savedInstanceState) { 33     super.onCreate(savedInstanceState); 34     setContentView(R.layout.activity_main); 35     mCustomViewL = (CustomViewL) findViewById(R.id.mCustomView); 36     rootView = (RelativeLayout) findViewById(R.id.ViewRoot); 37     rootView.setOnTouchListener(this); 38     mCustomViewL.getParent(); 39     mCustomViewL.addIndicator(name); 40     mGestureDetector = new GestureDetector(this, new myGestureDetectorLis()); 48   } 49    50   class myGestureDetectorLis implements GestureDetector.OnGestureListener { 51      52     private static final int degreeLimit = 30; 53     private static final int distanceLimit = 15; 54      55     private boolean isScroll = false; 56     @Override 57     public boolean onDown(MotionEvent e) { 58       // TODO Auto-generated method stub 59       Log.d(TAG, "myGestureDetectorLis onDown"); 60       isScroll = false; 61       return true; 62     } 63     @Override 64     public void onShowPress(MotionEvent e) { 65       // TODO Auto-generated method stub 66        67     } 68     @Override 69     public boolean onSingleTapUp(MotionEvent e) { 70       // TODO Auto-generated method stub 71       return false; 72     } 73      74     @Override 75     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, 76         float distanceY) { 77       // TODO Auto-generated method stub 78       if (isScroll) return false; 79       double degree = Math.atan(Math.abs(e2.getY() - e1.getY()) / Math.abs(e2.getX() - e1.getX())) * 180 /Math.PI; 80       float delta = e2.getX() - e1.getX(); 81       if (delta > distanceLimit && degree < degreeLimit) { 82         Log.d(TAG, "向右滑"); 83         isScroll = true; 84         mCustomViewL.scrollRight(); 85       } else if (delta < -distanceLimit && degree < degreeLimit) { 86         Log.d(TAG, "向左滑"); 87         isScroll = true; 88         mCustomViewL.scrollLeft(); 89       } 90       return false; 91     } 92      93     @Override 94     public void onLongPress(MotionEvent e) { 95       // TODO Auto-generated method stub 96        97     } 98     @Override 99     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,100         float velocityY) {101       // TODO Auto-generated method stub102       return false;103     }104     105   }106 107   @Override108   public boolean onTouch(View v, MotionEvent event) {109     // TODO Auto-generated method stub110     return mGestureDetector.onTouchEvent(event);111   }112 113 114 }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Android 实现 IOS相机滑动控件

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录