Android|Android上类似于iOS相机滑动切换的View

【Android|Android上类似于iOS相机滑动切换的View】项目地址:
https://github.com/duxingzhe/ios-camera-scrollerview-in-android
苹果相机有一个功能就是左右切换拍摄模式,左右滑动就可以切换。然而,目前的问题是如果使用了View和Fragment之后相机打开是有异常的,所以不能使用这种方式。
于是只好反编译其他实现了这种功能的相机,得到线索是,有一个自定义的BottomView,BottomView中加载了一个自定义的ViewGroup,里面有一个ViewGroup。在ViewGroup中定义了三个TextView,然后设置居中,字号等样式。
在自定义的CameraScrollerView中,先设置好初始化的选择效果

protected void onLayout(boolean changed, int left,int top,int right, int bottom){ int cCount = getChildCount(); int childLeft=0; int childRight=0; int selectedMode=Util.getCurrentSelectedIndex(); int widthOffset=0; //居中显示 /** * 遍历所有childView根据其宽和高,不考虑margin */ for(int i=0; i

然后这是滑动设置的效果
public final void scrollToNext(int preIndex, int nextIndex){ TextView selectedText=(TextView)getChildAt(preIndex); if(selectedText!=null){ selectedText.setTextColor(getResources().getColor(R.color.black)); } selectedText=(TextView)getChildAt(nextIndex); if(selectedText!=null){ selectedText.setTextColor(getResources().getColor(R.color.chosenTextColor)); } }public void computeScroll(){ if(mScroller.computeScrollOffset()){ scrollTo(mScroller.getCurrX(),mScroller.getCurrY()); invalidate(); } super.computeScroll(); }

在BottomView中左右滑动的设置为
public void moveLeft(){ CameraScroller cameraScroller=mCameraScroller; cameraScroller.leftIndex=Util.getCurrentSelectedIndex()-1; cameraScroller.rightIndex=Util.getCurrentSelectedIndex(); int k=Math.round((cameraScroller.getChildAt(cameraScroller.leftIndex).getWidth()+cameraScroller.getChildAt(cameraScroller.rightIndex).getWidth())/2.0F); cameraScroller.mScroller.startScroll(cameraScroller.getScrollX(),0,-k,0,cameraScroller.duration); cameraScroller.scrollToNext(cameraScroller.rightIndex,cameraScroller.leftIndex); Util.setSelectedIndex(Util.getCurrentSelectedIndex()-1); cameraScroller.invalidate(); }public void moveRight(){ CameraScroller cameraScroller=mCameraScroller; cameraScroller.leftIndex=Util.getCurrentSelectedIndex(); cameraScroller.rightIndex=Util.getCurrentSelectedIndex()+1; int k=Math.round((cameraScroller.getChildAt(cameraScroller.leftIndex).getWidth()+cameraScroller.getChildAt(cameraScroller.rightIndex).getWidth())/2.0F); cameraScroller.mScroller.startScroll(cameraScroller.getScrollX(),0,k,0,cameraScroller.duration); cameraScroller.scrollToNext(cameraScroller.leftIndex,cameraScroller.rightIndex); Util.setSelectedIndex(Util.getCurrentSelectedIndex()+1); cameraScroller.invalidate(); }

在初始化的时候,注意:
public BottomView(Context context, AttributeSet attrs){ super(context,attrs); mContext=context; LayoutInflater.from(context).inflate(R.layout.camera_scroller_layout,this,true); }

则效果为如下图所示:
Android|Android上类似于iOS相机滑动切换的View
文章图片

Android|Android上类似于iOS相机滑动切换的View
文章图片

    推荐阅读