Android開發(fā)之開發(fā)者頭條(一)啟動頁實現(xiàn)
廢話就不多說了,開始今天的正題,帶你實現(xiàn)開發(fā)者頭條APP的啟動頁。
一.老規(guī)矩,先上效果圖
從效果圖中我們可以看出,整個滑動的界面就是一個ViewPager實現(xiàn),然后監(jiān)聽ViewPager的滑動事件,改變底部四個小圖標的切換,以及跳轉(zhuǎn)到首頁的按鈕的隱藏顯示。
二.代碼實現(xiàn)
1).整個布局文件。上面是ViewPager,下面是四個小圖標存放的容器。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FCF2E4"> <android.support.v4.view.ViewPager android:id="@+id/viewpager_launcher" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="30dp" android:gravity="center_horizontal" android:orientation="horizontal"/> </RelativeLayout> </RelativeLayout>
2).LauncherActivity 首先判斷是否第一次啟動,如果不是第一次直接進入首頁,是第一次啟動就初始化ViewPager,設(shè)置適配器,設(shè)置ViewPager滑動監(jiān)聽,然后添加底部的。。。View。 在Viewpager監(jiān)聽函數(shù)里面改變底部圖標的選中狀態(tài),如果是最后一頁顯示“開啟我的頭條”按鈕。
/** * 第一次啟動頁面 * * @author Ansen * @create time 2016-04-15 */ @SuppressLint("ResourceAsColor") public class LauncherActivity extends FragmentActivity implements ILauncherView { private ViewPager viewpagerLauncher; private LauncherPagerAdapter adapter; private ImageView[] tips; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_luancher); if(!isFirst()){ gotoMain(); } viewpagerLauncher = (ViewPager) findViewById(R.id.viewpager_launcher); adapter = new LauncherPagerAdapter(this, this); viewpagerLauncher.setOffscreenPageLimit(2); viewpagerLauncher.setCurrentItem(0); viewpagerLauncher.setOnPageChangeListener(changeListener); viewpagerLauncher.setAdapter(adapter); viewpagerLauncher.setOnPageChangeListener(changeListener); ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);// 初始化底部顯示控件 tips = new ImageView[4]; for (int i = 0; i < tips.length; i++) { ImageView imageView = new ImageView(this); if (i == 0) { imageView.setBackgroundResource(R.drawable.page_indicator_focused); } else { imageView.setBackgroundResource(R.drawable.page_indicator_unfocused); } tips[i] = imageView; LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); layoutParams.leftMargin = 10;// 設(shè)置點點點view的左邊距 layoutParams.rightMargin = 10;// 設(shè)置點點點view的右邊距 group.addView(imageView, layoutParams); } } private OnPageChangeListener changeListener = new OnPageChangeListener() { @Override public void onPageScrollStateChanged(int arg0) {} @Override public void onPageScrolled(int arg0, float arg1, int arg2) {} @Override public void onPageSelected(int index) { setImageBackground(index);// 改變點點點的切換效果 TextView tvStartHeadlines = (TextView) adapter.getViews().get(index).findViewById(R.id.tv_start_headlines); if (index == tips.length - 1) {// 最后一個 tvStartHeadlines.setVisibility(View.VISIBLE); } else { tvStartHeadlines.setVisibility(View.INVISIBLE); } } }; /** * 改變點點點的切換效果 * @param selectItems */ private void setImageBackground(int selectItems) { for (int i = 0; i < tips.length; i++) { if (i == selectItems) { tips[i].setBackgroundResource(R.drawable.page_indicator_focused); } else { tips[i].setBackgroundResource(R.drawable.page_indicator_unfocused); } } } @Override public void gotoMain() { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } private boolean isFirst() { SharedPreferences setting = getSharedPreferences("headlines", 0); Boolean user_first = setting.getBoolean("FIRST", true); if (user_first) {// 第一次 setting.edit().putBoolean("FIRST", false).commit(); return true; } else { return false; } } }
3).LauncherPagerAdapter 繼承PagerAdapter,在構(gòu)造函數(shù)中初始化要顯示的所有頁面,其他的跟普通的適配器沒啥區(qū)別,就多了兩個重寫的方法,destroyItem跟instantiateItem。destroyItem是刪除一個頁面,instantiateItem是加載一個頁面。。
/** * ViewPager適配器 * @author ansen * @create time 2016-04-15 */ public class LauncherPagerAdapter extends PagerAdapter implements OnClickListener{ private ILauncherView launcherView; private List<View> views; //每頁顯示的圖片 private int[] images=new int[]{R.drawable.tutorial_1,R.drawable.tutorial_2,R.drawable.tutorial_3,R.drawable.tutorial_4}; public LauncherPagerAdapter(Context context,ILauncherView launcherView){ views=new ArrayList<View>(); this.launcherView=launcherView; //初始化每頁顯示的View for(int i=0;i<images.length;i++){ View item=LayoutInflater.from(context).inflate(R.layout.activity_luancher_pager_item, null); ImageView imageview=(ImageView) item.findViewById(R.id.imageview); imageview.setImageResource(images[i]); item.findViewById(R.id.tv_start_headlines).setOnClickListener(this); views.add(item); } } public List<View> getViews() { return views; } @Override public int getCount() { return views == null ? 0 : views.size(); } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object){ ((ViewPager) container).removeView(views.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { ((ViewPager) container).addView(views.get(position), 0); return views.get(position); } @Override public void onClick(View v) { launcherView.gotoMain(); } }
4).還有每一頁顯示的item布局,以及“開啟我的頭條”按鈕的背景shape我就不一一貼出來了。
關(guān)于 Android開發(fā)之開發(fā)者頭條(一)啟動頁實 就給大家介紹這么多。下篇文章給大家介紹Android開發(fā)之開發(fā)者頭條(二)實現(xiàn)左滑菜單,感興趣的朋友繼續(xù)關(guān)注腳本之家網(wǎng)站!
- Android項目實戰(zhàn)教程之高仿網(wǎng)易云音樂啟動頁實例代碼
- Android啟動頁出現(xiàn)白屏、黑屏的解決方案
- Android啟動頁解決方案(推薦)
- Android啟動頁廣告(騰訊廣告聯(lián)盟)解決方法及源碼下載
- Android啟動頁面定時跳轉(zhuǎn)的三種方法
- Android優(yōu)化之啟動頁去黑屏實現(xiàn)秒啟動
- Android使用ViewPager實現(xiàn)啟動引導(dǎo)頁
- Android實現(xiàn)過渡動畫、引導(dǎo)頁 Android判斷是否第一次啟動App
- Android開發(fā)實戰(zhàn)之漂亮的ViewPager引導(dǎo)頁
- Android控件ViewPager實現(xiàn)帶有動畫的引導(dǎo)頁
- Android開發(fā)實現(xiàn)的ViewPager引導(dǎo)頁功能(動態(tài)加載指示器)詳解
- Android實現(xiàn)漸變啟動頁和帶有指示器的引導(dǎo)頁
相關(guān)文章
Android 實例開發(fā)一個學(xué)生管理系統(tǒng)流程詳解
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實現(xiàn)一個學(xué)生管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11Android編程實現(xiàn)的EditText彈出打開和關(guān)閉工具類
這篇文章主要介紹了Android編程實現(xiàn)的EditText彈出打開和關(guān)閉工具類,涉及Android輸入框EditText彈出打開和關(guān)閉功能簡單實現(xiàn)技巧,需要的朋友可以參考下2018-02-02Android ConstraintLayout約束布局使用詳解
ConstraintLayout 即約束布局,也是 Android Studio 的默認布局,它可以減少布局的層級,改善布局性能。不夸張地說,它基本上可以實現(xiàn)任何你想要的布局效果,下面,咱們一起來瞧瞧吧2022-11-11Android編程圖片操作類定義與用法示例【拍照,相冊選圖及裁剪】
這篇文章主要介紹了Android編程圖片操作類定義與用法,涉及Android拍照,相冊選圖及裁剪等圖片操作功能及權(quán)限控制相關(guān)操作技巧,需要的朋友可以參考下2018-02-02android studio3.0以上如何通過navicat訪問SQLite數(shù)據(jù)庫文件
這篇文章主要介紹了android studio3.0以上如何通過navicat訪問SQLite數(shù)據(jù)庫文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-06-06Android游戲開發(fā) 自定義手勢--輸入法手勢技術(shù)
本文主要介紹 Android游戲開發(fā)中自定義手勢--輸入法手勢技術(shù),這里提供了實現(xiàn)效果圖以及示例代碼,有開發(fā)手機游戲的朋友可以參考下2016-08-08