设为首页 加入收藏

TOP

Android 实现 IOS相机滑动控件(一)
2017-10-13 10:31:43 】 浏览:4276
Tags:Android 实现 IOS 相机 滑动 控件

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

  后面通过调整TextView X方向的scale使文字看着紧凑一点,然后通过计算的距离的方式,在滑动的时候保持各组文字之间的间隔一致,最后实现的效果还是和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;
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇GreenDao2.2升级GreenDao3.0的适.. 下一篇计算机网络和Internet之核心网络

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目