Android刷卡检测特定元素

时间:2016-03-15 11:37:51

标签: android swipe

我有一个 imageView 和一个 textView 以及相对布局中的几个元素。如果我在特定元素上滑动,我想触发一个动作。例如,如果尝试向上或向下滑动 imageView ,我想触发操作。如果我刷屏幕的另一部分,什么都不会发生。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:2)

我想举个例子,我在图像视图上设置了一个手势监听器,并有各种方法来实际获取图像视图的刷新方式: 活动内部:

public class SwipeImageDemo extends Activity{


ImageView ivSwipe ;

int[] arrImages = new int[]{R.drawable.bot1, R.drawable.bot2, R.drawable.bot3,
        R.drawable.bot4, R.drawable.bot5, R.drawable.bot6, R.drawable.bot7}; 


int currentIndex = 0;

final int MAX_IMAGES = arrImages.length - 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ivSwipe = (ImageView) findViewById(R.id.ivSwipe);
    ivSwipe.setImageResource(arrImages[currentIndex]);

    ivSwipe.setOnTouchListener(new SwipeHelper(getBaseContext()){


        @Override
        public void onSwipeLeftToRight() {

            currentIndex--;
            if(currentIndex<0){

                currentIndex = 0;
                return; 
            }

            Toast.makeText(getBaseContext(), "swipe right", Toast.LENGTH_SHORT).show();

            ivSwipe.setImageResource(arrImages[currentIndex]);

        }

        @Override
        public void onSwipeRightToLeft() {


            currentIndex++;
            if(currentIndex > MAX_IMAGES){

                currentIndex = MAX_IMAGES;
                return;
            }



            Toast.makeText(getBaseContext(), "swipe left", Toast.LENGTH_SHORT).show();
            ivSwipe.setImageResource(arrImages[currentIndex]);
        }

        @Override
        public void onSwipeBottomToTop() {

            Toast.makeText(getBaseContext(), "SwipeTop", Toast.LENGTH_SHORT).show();

        }

        @Override
        public void onSwipeTopToBottom() {

            Toast.makeText(getBaseContext(), "Swipe bottom", Toast.LENGTH_SHORT).show();

        }


    });
}

}

滑动辅助类:

public class SwipeHelper implements OnTouchListener{

private GestureDetector mGestureDetector;

public SwipeHelper(Context mContext){

    mGestureDetector = new GestureDetector(mContext, new MyGestureListener());


}


private class MyGestureListener extends SimpleOnGestureListener{

    private static final int SWIPE_THRESHOLD = 100;
    private static final int SWIPE_VELOCITY_THRESHOLD = 100;


    @Override
    public boolean onDown(MotionEvent e) {

        return true;
    }



    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        boolean result = false;
        try {
            float diffY = e2.getY() - e1.getY();
            float diffX = e2.getX() - e1.getX();
            if (Math.abs(diffX) > Math.abs(diffY)) {
                if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffX > 0) {
                        onSwipeLeftToRight();
                    } else {
                        onSwipeRightToLeft();
                    }
                }
                result = true;
            } 
            else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
                    if (diffY > 0) {
                        onSwipeTopToBottom();
                    } else {
                        onSwipeBottomToTop();
                    }
                }
                result = true;

        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return result;
    }




}

public boolean onTouch(View v, MotionEvent event) {
    return mGestureDetector.onTouchEvent(event);
}




public void onSwipeRightToLeft() {
}

public void onSwipeLeftToRight() {
}

public void onSwipeBottomToTop() {
}

public void onSwipeTopToBottom() {
}

}

尝试一些解决方法,你应该能够得到你想要的东西

答案 1 :(得分:0)

View.OnTouchListener设置为ImageView

findViewById(R.id.myImageView).setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View view, MotionEvent event) {
         // Your code here
    }
}