设为首页 加入收藏

TOP

Android 实现 IOS相机滑动控件(二)
2017-10-13 10:31:43 】 浏览:4280
Tags:Android 实现 IOS 相机 滑动 控件
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 stub 102 return false; 103 } 104 105 } 106 107 @Override 108 public boolean onTouch(View v, MotionEvent event) { 109 // TODO Auto-generated method stub 110 return mGestureDetector.onTouchEvent(event); 111 } 112 113 114 }

 

CustomViewL.java:

  自定义的控件,继承自LinearLayout。在onLayout里面,重新计算了下各个子控件的位置,因为各组文字的scale是不一样的,必须重新Layout一下各个子控件的位置,是文字的显示区域和点击区域是一样的,这样给各个子控件设置的onClick事件才有效。

  dispatchDraw方法是重绘各个子控件,更具各个子控件到中心控件的位置的距离,设置了各个TextView X方向的scale,为了就是看着要有一个立体的效果。

  滑动之后,开始一个动画,动画结束之后重新requestLayout一下,重新计算下各个控件的位置。这个可以连续滑动的,如果这次动画在执行,会保存一下,等动画完了之后会接着跑下一个动画。各个子控件滑动距离的计算有兴趣的可以自己研究下,这里就不赘述了,其实也是数学知识。

  1 package com.example.androidcustomnview;
  2 
  3 import android.content.Context;
  4 import android.graphics.Camera;
  5 import android.graphics.Canvas;
  6 import android.graphics.Color;
  7 import android.graphics.LinearGradient;
  8 import android.graphics.Matrix;
  9 import android.graphics.Paint;
 10 import android.graphics.Shader;
 11 import android.os.Handler;
 12 import android.os.Message;
 13 import android.util.AttributeSet;
 14 import android.util.Log;
 15 import android.view.MotionEvent;
 16 import android.view.View;
 17 import android.view.WindowManager;
 18 import android.view.animation.Animation;
 19 import android.view.animation.Animation.AnimationListener;
 20 import android.view.animation.TranslateAnimation;
 21 import android.widget.LinearLayout;
 22 import android.widget.TextView;
 23 
 24 public class CustomViewL extends LinearLayout {
 25 
 26     private static final String TAG = "CustomViewL.TAG";
 27     private Matrix mMatrix;
 28     Camera mCamera;
 29     private int mCurrentItem = 2;    
 30     private int screenWidth;
 31     private Paint mPaint;
 32 
 33     public static final float ItemScale = 0.1f;
 34 
 35     public CustomViewL(Context context) {
 36         super(context);
 37         // TODO Auto-generated constructor stub
 38         initView(context);
 39     }
 40     
 41     public CustomViewL(Context context, AttributeSet attrs, int defStyleAttr,
 42             int defStyleRes) {
 43         super(context, attrs, defStyleAttr, defStyleRes);
 44         initView(context);
 45     }
 46 
 47     public CustomViewL(Context context, AttributeSet attrs, int defStyleAttr) {
 48         super(context, attrs, defStyleAttr);
 49         initView(context);
 50     }
 51 
 52     public CustomViewL(Context context, AttributeSet attrs) {
 53         super(context, attrs);
 54         initView(context);
 55     }
 56     
 57     private void initView(Context context) {
 60         screenWidth = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE))
 61                 .getDefaultDisplay().getWidth();
 63     }
 64     
 65     @Override
 66     protected void onLayout(boolean changed, int l, int t, int r, int b) {
 67         Log.d(TAG, "onLayout ");
 68         super.onLayout(changed, l , t, r, b);
 69         View v = getChildAt(mCurrentItem);
 70         int delta = getWidth() / 2 -
首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇GreenDao2.2升级GreenDao3.0的适.. 下一篇计算机网络和Internet之核心网络

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目