0

을 열어 탭을 밀어 와이프 떠날 때 : https://github.com/ogaclejapan/SmartTabLayout여기 왼쪽 탐색 창 난 (smartTabLayout)을 탭 슬라이딩 재 설계를 사용하고

그리고, 소재 디자인 측면 탐색 창 (로이드 상주 메뉴), 여기서는 https://github.com/SpecialCyCi/AndroidResideMenu

내가 직면 한 문제는 다음과 같습니다. 탭에서 왼쪽으로 스 와이프하면 탐색 서랍이 열리지 만 오른쪽으로 스 와이프하면 문제가 없습니다.

MainActivity.java : 슬라이딩 탭용

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private static final String TAG = "MainActivity"; 

    private SectionsPageAdapter sectionsPageAdapter; 
    private ViewPager viewPager; 
    Toolbar toolbar; 
    ResideMenu resideMenu; 
    SmartTabLayout smartTabLayout; 
    private MainActivity mContext; 
    private ResideMenuItem equalizer; 
    private ResideMenuItem ringtonemaker; 
    private ResideMenuItem identifysong; 
    private ResideMenuItem themes; 
    private ResideMenuItem rateus; 


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

     mContext = MainActivity.this; 
     setUpMenu(); 


     toolbar = (Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 


     sectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager()); 

     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 

     smartTabLayout = (SmartTabLayout) findViewById(R.id.viewpagertab); 
     smartTabLayout.setViewPager(viewPager); 



    } 


    private void setupViewPager(ViewPager viewPager) { 

     SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new Albums(), "Albums"); 
     adapter.addFragment(new Artists(), "Artists"); 
     adapter.addFragment(new Songs(), "Songs"); 
     adapter.addFragment(new Playlists(), "Playlists"); 
     adapter.addFragment(new Genres(), "Genres"); 
     adapter.addFragment(new My_Files(), "My Files"); 
     viewPager.setAdapter(adapter); 
     viewPager.setPageTransformer(true, new CubeInTransformer()); 

    } 

     private void setUpMenu() { 

     // attach to current activity; 
     resideMenu = new ResideMenu(this); 
     resideMenu.setBackground(R.drawable.city); 
     resideMenu.attachToActivity(this); 
     //valid scale factor is between 0.0f and 1.0f. leftmenu'width is 150dip. 
     resideMenu.setScaleValue(0.6f); 

     // create menu items; 
     equalizer = new ResideMenuItem(this, R.drawable.city, "Equalizer"); 
     ringtonemaker = new ResideMenuItem(this, R.drawable.city, "Ringtone Maker"); 
     identifysong = new ResideMenuItem(this, R.drawable.city, "Identify Song"); 
     themes = new ResideMenuItem(this, R.drawable.city, "Theme"); 
     rateus = new ResideMenuItem(this, R.drawable.city, "Rate us"); 

     equalizer.setOnClickListener(this); 
     ringtonemaker.setOnClickListener(this); 
     identifysong.setOnClickListener(this); 
     themes.setOnClickListener(this); 
     rateus.setOnClickListener(this); 

     resideMenu.addMenuItem(equalizer, ResideMenu.DIRECTION_LEFT); 
     resideMenu.addMenuItem(ringtonemaker, ResideMenu.DIRECTION_LEFT); 
     resideMenu.addMenuItem(identifysong, ResideMenu.DIRECTION_LEFT); 
     resideMenu.addMenuItem(themes, ResideMenu.DIRECTION_LEFT); 
     resideMenu.addMenuItem(rateus, ResideMenu.DIRECTION_LEFT); 

     // You can disable a direction by setting -> 
     resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT); 

    } 



    @Override 
    public void onClick(View view) { 

    } 
} 

어댑터 :

class SectionsPageAdapter extends FragmentPagerAdapter { 

    private final List<Fragment> FragmentList = new ArrayList<>(); 
    private final List<String> FragmentTitleList = new ArrayList<>(); 

    public void addFragment(Fragment fragment, String Title){ 

     FragmentList.add(fragment); 
     FragmentTitleList.add(Title); 
    } 


    public SectionsPageAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return FragmentTitleList.get(position); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return FragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return FragmentList.size(); 
    } 
} 
,691 여기

This is what happens when I swipe left. The drawer opens up

Tab on the extreme right

는 코드

activity_main.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/city" 

tools:context="com.musicplayer.musicana.MainActivity"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="30dp" 
    android:title="Musicana" 
    app:titleTextColor="#ffffff"> 

</android.support.v7.widget.Toolbar> 

<com.ogaclejapan.smarttablayout.SmartTabLayout 
    android:id="@+id/viewpagertab" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:layout_below="@+id/toolbar" 
    app:stl_indicatorAlwaysInCenter="false" 
    app:stl_indicatorWithoutPadding="false" 
    app:stl_indicatorInFront="false" 
    app:stl_indicatorInterpolation="smart" 
    app:stl_indicatorGravity="center" 
    app:stl_indicatorColor="#40C4FF" 
    app:stl_indicatorThickness="30dp" 
    app:stl_indicatorWidth="110dp" 
    app:stl_indicatorCornerRadius="10dp" 
    app:stl_overlineColor="#4D000000" 
    app:stl_overlineThickness="0dp" 
    app:stl_underlineColor="#ffffff" 
    app:stl_underlineThickness="0dp" 
    app:stl_dividerColor="#ffffff" 
    app:stl_dividerThickness="0dp" 
    app:stl_defaultTabBackground="?attr/selectableItemBackground" 
    app:stl_defaultTabTextAllCaps="false" 
    app:stl_defaultTabTextColor="#ffffff" 
    app:stl_defaultTabTextSize="16sp" 
    app:stl_defaultTabTextHorizontalPadding="30dp" 
    app:stl_defaultTabTextMinWidth="0dp" 
    app:stl_distributeEvenly="false" 
    app:stl_clickable="true" 
    app:stl_titleOffset="24dp" 
    app:stl_drawDecorationAfterTab="false" 
    /> 

<android.support.v4.view.ViewPager 
    android:id="@+id/viewpager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/viewpagertab" 
    /> 
</RelativeLayout> 
+0

처럼 사용? 'resideMenu.addIgnoredView (viewPager); ' –

+0

아니, 이것을 시도했다. 이것은 단지 전체 viewpager가 측면 탐색기 서랍에 액세스하는 것을 차단합니다. 처음 탭을 스 와이프하면 사이드 탐색 서랍을 열려고합니다. 어쨌든, 당신의 도움을 주셔서 감사합니다 :) –

+0

당신은 viewpager의 첫 번째 조각에 도달했을 때와 같이 뭔가를 시도해 볼 수 있습니다. 그리고 나서 ignoredView를 제거하고 다른 페이지에있을 때 Viewpager를 무시 된보기에 추가하십시오. –

답변

0

내가 ViewPager 터치 차단을 방지하기 위해 드래그 영역을 설정하는 가능성이없는 dispatchTouchEventhere 방법을 볼 수 있듯이. 따라서이 저장소를 포크하여 해당 기능을 추가 할 수 있습니다. 또는 당신은 대체 할 수 있습니다 활동의 dispatchTouchEvent :

boolean menuDragging = false; 

public boolean isInsideMenuDragArea(MotionEvent ev) { 
    return ev.getX() < 200; // THIS IS PIXELS, NOT DP! 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (menuDragged) return resideMenu.dispatchTouchEvent(ev); 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     if (!isInsideMenuDragArea(ev)) { 
       return super.dispatchTouchEvent(ev); 
     } else { 
       menuDragging = true; 
     }  
    } else if (ev.getAction() == MotionEvent.ACTION_UP) { 
     menuDragging = false; 
    } 
    return resideMenu.dispatchTouchEvent(ev); 

} 

나는 이것이 무슨 뜻인지 이해하기 충분하다 생각

편집 :

당신이 왼쪽으로 스 와이프하면 측면 탐색 서랍을 열려면 첫 번째 탭

viewPager.setOnPageChangeListener(new OnPageChangeListener() { 
    public void onPageScrollStateChanged(int state) {} 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

    public void onPageSelected(int position) { 
     if (position == 0) resideMenu.removeIgnoredView(viewPager); 
     else resideMenu.addIgnoredView(viewPager); 
    } 
}); 

EDIT2 :활동

boolean resideMenuEnabled = true; 

public void setResideMenuEnabled(boolean enabled) { 
    if (resideMenuEnabled != enabled) { 
      if (enabled) resideMenu.removeIgnoredView(viewPager); 
      else resideMenu.addIgnoredView(viewPager); 
      resideMenuEnabled = enabled; 
    } 
} 

이 추가 그리고 당신이 찾고있는 무슨이인가 될 수도 있습니다

viewPager.setOnPageChangeListener(new OnPageChangeListener() { 
    public void onPageScrollStateChanged(int state) {} 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

    public void onPageSelected(int position) { 
     if (position == 0) setResideMenuEnabled(true); 
     else setResideMenuEnabled(false); 
    } 
}); 
+0

내 활동에서 dispatchTouchEvent를 재정의했지만 운이 아직 안됐어. ( –

+0

@SebinPaul 대답 편집 – Romadro

+0

이것은 처음 두 탭에서 작동하는 것으로 보입니다. 그러나 맨 오른쪽 탭을 가져 와서 첫 번째 탭으로 돌아 왔을 때 음, 시간 내 주셔서 감사합니다 :) –