lang
1public class MainActivity extends FragmentActivity { 2 ViewPager viewPager; 3 TabHost tabHost; 4 View indicator; 5 TabWidget tabWidget; 6 7 @Override 8 protected void onCreate(Bundle savedInstanceState) { 9 super.onCreate(savedInstanceState); 10 setContentView(R.layout.activity_main); 11 //マテリアルデザインの作業 12 tabWidget = (TabWidget) findViewById(android.R.id.tabs); 13 tabWidget.setStripEnabled(false); 14 tabWidget.setShowDividers(LinearLayout.SHOW_DIVIDER_NONE); 15 indicator = findViewById(R.id.indicator); 16 getActionBar().setElevation(0); //TabとActionBarとの間の影を消す 17 18 float elevation = 4 * getResources().getDisplayMetrics().density; 19 tabHost.setElevation(elevation); 20 21 viewPager.setOnPageChangeListener(new PageChangeListener()); 22 23 //PagerとTabの設定 24 ViewPagerAdapter vpa = new ViewPagerAdapter(getSupportFragmentManager()); 25 viewPager = (ViewPager) findViewById(R.id.pager); 26 viewPager.setAdapter(vpa); 27 28 tabHost = (TabHost) findViewById(android.R.id.tabhost); 29 tabHost.setup(); 30 31 LayoutInflater inflater = LayoutInflater.from(this); 32 for (int i = 0; i < vpa.getCount(); i++) { 33 TextView tv = (TextView) inflater.inflate(R.layout.tab_widget, tabWidget, false); 34 tv.setText(vpa.getPageTitle(i)); 35 tabHost.addTab(tabHost 36 .newTabSpec(String.valueOf(i)) 37 .setIndicator(vpa.getPageTitle(i)) 38 .setContent(android.R.id.tabcontent)); 39 } 40 41 tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() { 42 @Override 43 public void onTabChanged(String tabId) { 44 viewPager.setCurrentItem(Integer.valueOf(tabId)); 45 } 46 }); 47 48 viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 49 @Override 50 public void onPageSelected(int position) { 51 super.onPageSelected(position); 52 tabHost.setCurrentTab(position); 53 } 54 }); 55 } 56 57 private class PageChangeListener implements ViewPager.OnPageChangeListener { 58 private int scrollingState = ViewPager.SCROLL_STATE_IDLE; 59 60 @Override 61 public void onPageSelected(int position) { 62 // スクロール中はonPageScrolled()で描画するのでここではしない 63 if (scrollingState == ViewPager.SCROLL_STATE_IDLE) { 64 updateIndicatorPosition(position, 0); 65 } 66 tabWidget.setCurrentTab(position); 67 } 68 69 @Override 70 public void onPageScrollStateChanged(int state) { 71 scrollingState = state; 72 } 73 74 @Override 75 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 76 updateIndicatorPosition(position, positionOffset); 77 } 78 79 private void updateIndicatorPosition(int position, float positionOffset) { 80 View tabView = tabWidget.getChildTabViewAt(position); 81 int indicatorWidth = tabView.getWidth(); 82 int indicatorLeft = (int) ((position + positionOffset) * indicatorWidth); 83 84 final FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) indicator.getLayoutParams(); 85 layoutParams.width = indicatorWidth; 86 layoutParams.setMargins(indicatorLeft, 0, 0, 0); 87 indicator.setLayoutParams(layoutParams); 88 } 89 } 90}
このコードで実行すると落ちます。どこがおかしいですか?
回答3件
あなたの回答
tips
プレビュー