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第三方框架(五)ButterKnife
- Y房东的后半生14
- 陇上秋二|陇上秋二 罗敷媚
- MediaRecorder前后摄像头同时录像
- live|live to inspire 一个普通上班族的流水账0723
- 上班后阅读开始变成一件奢侈的事
- 危险也是机会
- “精神病患者”的角度问题
- Android中的AES加密-下
- 亲子日记第186篇,2018、7、26、星期四、晴