Android 从左向右滑动,从屏幕左侧平稳打开相机。如何做到这一点?
我正在制作一个相机,包括从左到右的手势滑动,它会打开相机。 但是,摄像头工作不平稳,而且从屏幕右侧打开 我应该怎么做才能从左边顺利地打开它 下面是我正在使用的代码Android 从左向右滑动,从屏幕左侧平稳打开相机。如何做到这一点?,android,android-camera,android-gesture,Android,Android Camera,Android Gesture,我正在制作一个相机,包括从左到右的手势滑动,它会打开相机。 但是,摄像头工作不平稳,而且从屏幕右侧打开 我应该怎么做才能从左边顺利地打开它 下面是我正在使用的代码 class SwipeGestureListener extends GestureDetector.SimpleOnGestureListener implements View.OnTouchListener { Context context; GestureDetector gDetector;
class SwipeGestureListener extends GestureDetector.SimpleOnGestureListener implements
View.OnTouchListener {
Context context;
GestureDetector gDetector;
static final int SWIPE_MIN_DISTANCE = 120;
static final int SWIPE_MAX_OFF_PATH = 250;
static final int SWIPE_THRESHOLD_VELOCITY = 200;
public SwipeGestureListener() {
super();
}
public SwipeGestureListener(Context context) {
this(context, null);
}
public SwipeGestureListener(Context context, GestureDetector gDetector) {
if (gDetector == null)
gDetector = new GestureDetector(context, this);
this.context = context;
this.gDetector = gDetector;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try{
if (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY) {
return false;
}
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) {
Toast.makeText(HomeActivity.this,
"swipe RightToLeft ", Toast.LENGTH_SHORT).show();
} else if ((e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE&&e2.getY()-e1.getY()<100)&&e1.getX()<30) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
askForcameraPermission();
} else {
startCamera();
}
}
}catch(Exception e){
}
return super.onFling(e1, e2, velocityX, velocityY);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return gDetector.onTouchEvent(event);
}
public GestureDetector getDetector() {
return gDetector;
}
}
class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 20;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 10;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
askForcameraPermission();
} else {
startCamera();
}
}
} catch (Exception e) {
// nothing
}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
}
类SwipeGestureListener扩展了GestureDetector.SimpleOnGestureListener实现
View.OnTouchListener{
语境;
手势检测器;
静态最终整数滑动距离=120;
静态最终整数滑动路径=250;
静态最终整数滑动\u阈值\u速度=200;
公共SwipeGestureListener(){
超级();
}
公共SwipeGestureListener(上下文){
这个(上下文,空);
}
公共SwipeGestureListener(上下文、手势检测器GD检测器){
if(gDetector==null)
gDetector=新的GestureDetector(上下文,this);
this.context=上下文;
this.gDetector=gDetector;
}
@凌驾
公共布尔onFling(运动事件e1、运动事件e2、浮点速度X、,
浮动速度y){
试一试{
if(数学abs(速度x)<滑动阈值\u速度){
返回false;
}
if(e1.getX()-e2.getX()>滑动最小距离){
Toast.makeText(HomeActivity.this,
“从右向左滑动”,Toast.LENGTH\u SHORT.show();
}else if((e2.getX()-e1.getX()>滑动最小距离和&e2.getY()-e1.getY()滑动最大路径)
返回false;
//从右向左滑动
if(e1.getX()-e2.getX()>滑动最小距离和&Math.abs(速度x)>滑动阈值速度){
}else if(e2.getX()-e1.getX()>swip\u MIN\u DISTANCE&&Math.abs(velocityX)>swip\u THRESHOLD\u VELOCITY){
if(android.os.Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.M){
askForcameraPermission();
}否则{
startCamera();
}
}
}捕获(例外e){
//没什么
}
返回false;
}
@凌驾
公共布尔onDown(运动事件e){
返回true;
}
@凌驾
在ShowPress上公开作废(运动事件e){
}
@凌驾
公共布尔onSingleTapUp(运动事件e){
返回false;
}
@凌驾
公共布尔onScroll(MotionEvent e1、MotionEvent e2、浮点距离X、浮点距离Y){
返回false;
}
@凌驾
公开无效在线新闻(运动事件e){
}
}
我的参考是Instagram应用程序,它可以从左向右滑动打开相机。使用带片段的viewpager。它比使用手势检测器更简单。是的,我还认为将片段与viewpager一起使用是最好的!事实上,该应用程序已经开发出来,并且已经上市。现在要改变f低!