Я пытаюсь разработать флиппер изображения Android со следующим поведением.
Пункт 1 я мог успешно реализовать без проблем.
Проблема в том, что я не могу реализовать 2 и 3 одновременно, потому что imageView.OnClickListner()
всегда идет первым перед запуском Flipper.OnTouch()
Листнера. Таким образом, скольжения никогда не происходит, но новая активность загружается сразу.
Как я могу одновременно реализовать все 3 требования в своем приложении для Android?
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
View root = inflater.inflate(R.layout.fragment_home, container, false);
int sliderImgs[] = {R.drawable.slider_img_1, R.drawable.slider_img_1, R.drawable.slider_img_1};
viewFlipper = root.findViewById(R.id.img_slider);
mContext = this.getContext();
viewFlipper.setAutoStart(true);
viewFlipper.setFlipInterval(20000);
viewFlipper.setInAnimation(this.getContext(), R.anim.slide_in_right);
viewFlipper.setOutAnimation(this.getContext(), R.anim.slide_out_left);
viewFlipper.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
});
for(int sliderImg:sliderImgs){
slideshowImages(sliderImg);
}
}
private void slideshowImages(int image){
ImageView imageView = new ImageView(this.getContext());
imageView.setBackgroundResource(image);
viewFlipper.addView(imageView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View notificaionFragment = getLayoutInflater().inflate(R.layout.fragment_property_details, null);
BottomSheetDialog bottomSheetDialog = arrangeBottomSheet(notificaionFragment);
new Notification(notificaionFragment, mContext, getLayoutInflater(), bottomSheetDialog);
}
});
}
Не могли бы вы показать нам код? Я хотел бы знать, является ли флиппер пользовательской реализацией
@JorgeMartinez Добавил фрагмент кода. пожалуйста, проверьте
Что я сделал, так это установил порог... Я отслеживаю движение пальца на экране; если он достигает определенного числа, я рассматриваю это как флип; в противном случае это щелчок по кнопке (или ImageView или что-то еще) и вызовите PerformClick.
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
break;
case MotionEvent.ACTION_UP:
float endX = event.getX();
float endY = event.getY();
//swipe right
if (startX > endX && (startX - endX) > 10.0) {
if (pageIndex < totalPages) {
pageIndex++;
vFlipper.setInAnimation(EventActivity.this, R.anim.transition_in_left);
vFlipper.setOutAnimation(EventActivity.this, R.anim.transition_out_left);
vFlipper.showNext();
}
} else if ((startX - endX) > 0 && (startX - endX) < 10.0) {
v.performClick();
}
float operacion = Math.abs(startX - endX);
if (startX < endX && operacion > 10.0) {
if (pageIndex > 1) {
pageIndex--;
vFlipper.setInAnimation(EventActivity.this, R.anim.transition_in_right);
vFlipper.setOutAnimation(EventActivity.this, R.anim.transition_out_right);
vFlipper.showPrevious();
}
} else if (operacion < 10 && operacion != 0) {
v.performClick();
}
if (startX - endX == 0) {
v.performClick();
}
break;
}
return true;
}
Ну... Глядя на вашу реализацию, я бы посоветовал вам вместо этого использовать viewPager, он более удобен для пользователя, вы можете легко добавлять фрагменты или представления и менее сложно. https://androidwave.com/auto-scroll-viewpager-android/ взгляните на этот туториал, он отлично работает, я использовал его для реализации пользовательского viewPager в одном из моих приложений!
Что вы пробовали? Любой код?