사진 및 비디오 탭에 동일한 조각을 사용해야하지만 탭이 3 개 있습니다. 뷰 파인더에 두 개의 조각이 있고 tablayout에 세 개의 탭이 있습니다. 나는 인스 타 그램처럼 뷰 파인더 변경 효과를 얻고 싶다. 내가 무슨 짓을했는지 : 나는 아래의 사용자 정의 viewpager를 만들어 :Android ViewPager (인스 타 그램 사진 작업)
public class SwipableViewPager extends ViewPager {
private float downX;
private float downY;
private float mStartDragX;
private float upX;
private float upY;
private boolean dragDisabled;
private SwipeListener mListener;
public void setSwipeListener(SwipeListener listener) {
mListener = listener;
}
public SwipableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
float x = ev.getX();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
downX = ev.getX();
downY = ev.getY();
mStartDragX = x;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
upX = ev.getX();
upY = ev.getY();
float deltaX = downX - upX;
if(deltaX>-getWidth() && deltaX< -getWidth()/4 && getCurrentItem() == getAdapter().getCount() - 1){
mListener.setPageAndEnableDrag();
}
break;
case MotionEvent.ACTION_MOVE:
if (mStartDragX - 30 > x && getCurrentItem() == getAdapter().getCount() - 1) {
mListener.onSwipeOutAtEnd();
}
break;
}
if(dragDisabled) {
return false;
}
else{
return super.onInterceptTouchEvent(ev);
}
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(dragDisabled) return false;
return super.onTouchEvent(ev);
}
public void disableDrag(boolean disabled) {
dragDisabled = disabled;
}
public interface SwipeListener {
void setPageAndEnableDrag();
void onSwipeOutAtEnd();
}
}
현재 항목 어댑터에서 마지막 항목 (당신이 사진 탭에있을 때이 필요하고 당신이 비디오 탭을 가고 싶어 잘 때 슬쩍 통지합니다
스 와이프로). 활동에서이 같은 viewpager 설정 :
private void setupViewPager() {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(GalleryFragment.newInstance(), getResources().getString(R.string.gallery_toolbar_title));
TakePhotoFragment fragment = new TakePhotoFragment();
adapter.addFragment(fragment, getResources().getString(R.string.photo));
viewPager.setAdapter(adapter);
viewPager.setSwipeListener(this);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()){
case 1: //selected photo tab
viewPager.setCurrentItem(1);
toolbar.setTitle(R.string.photo);
viewPager.disableDrag(false); //switch on default swipe
break;
case 2: // selected video tab
toolbar.setTitle(R.string.video);
viewPager.disableDrag(true); // switch off default swipe
break;
default: // selected gallery tab
viewPager.setCurrentItem(tab.getPosition());
toolbar.setTitle(R.string.gallery_toolbar_title);
viewPager.disableDrag(false); //switch on default swipe
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
@Override
public void setPageAndEnableDrag() {
tabLayout.getTabAt(1).select();
viewPager.disableDrag(false);
}
public void setPagerEnabledDrag(boolean enabled) {
viewPager.disableDrag(!enabled);
}
@Override
public void onSwipeOutAtEnd() {
viewPager.disableDrag(true);
tabLayout.getTabAt(2).select();
}
다 좋아,하지만 당신은 갤러리 탭에있을 때 당신은 비디오 탭으로 이동하려는 경우, 당신은 비디오 탭을 클릭하여 수행 할 수 없습니다. 비디오 탭을 클릭하면 활성 사진 탭이 생기고 그 다음에 비디오 탭을 클릭하면 활성 비디오 탭이 나타납니다. 또한 사진 탭과 비디오 탭에서 일하는 것을 못 생기게 변경합니다. 비디오 탭을 클릭 할 때 비디오 탭으로 가야 할 때가 있습니다. 지금처럼 사진 탭이 아닙니다.
도 참조 비디오 : https://youtu.be/tbT7mzkmydQ
- 왜이 두 조각뿐 아니라 세 개의 탭? 카메라 객체는 하나의 액티비티에 하나만 만들 수 있으므로 사진 및 비디오 탭에 하나의 조각을 사용해야하는 이유는 무엇입니까?
- 왜 드래그를 해제해야합니까? 사용자가 세 번째 탭으로 이동하면 viewpager의 기본 스 와이프 효과를 비활성화해야합니다 (그렇게하지 않으면 thrid 탭에서 두 번째 viewpager로 스 와이프하여 첫 번째 탭으로 이동할 때)
- 나는 무한하고 싶지 않습니다. 뷰 페이지.
- 오른쪽 (세 번째) 단편부터 왼쪽 (첫 번째) 단편에 이르기를 원하지 않습니다.
해결 비디오 참조하십시오 Video of my activity in action
나는 당신의 문제에 대해 희미한 생각을하고 있습니다. "첫 번째", "두 번째"및 "세 번째"만 사용하여 ** 전체 질문 **을 편집하면 도움이됩니다. 나는 아직도 이해하지 못한다. 하나의 카메라 조각에서 다른 카메라 조각으로 갈 때 어떤 일이 일어나기를 원합니 까? 물론 탭이 바뀌어야하지만 호출기에 슬라이딩 애니메이션이 있어야합니까? 무엇 사이? 아니면 아무 일도 일어나지 않으시겠습니까? 또한, 당신은 왜 훔쳐서 엉망이됩니까? 오히려 어댑터를 다뤄야하지 않습니까? 구현을 보여 주시겠습니까? 또한 단 두 조각 만 가지고 있다면 처음에는 세 개의 탭을 어떻게 얻습니까? – kalabalik
비디오 탭을 클릭하면 사진 탭으로 이동합니다. 두 번째 클릭 후 비디오 탭으로 이동합니다. 인스 타 그램을 사용하신 적이 있습니까? –
달성하고자하는 것을 비디오로 게시 할 수 있습니까? – abhiank