<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      帶你實現開發者頭條(一) 啟動頁實現

      對于很多初學者或者剛工作的Android新手來說,我們的項目經驗還停留在做demo的階段,有沒有一種很low的感覺,并且當你真正上手做大項目的時候又不知道把自己學到的東西用上去。。有一種自己家里有座金山卻不知道可以用來換錢換吃的。這里寫圖片描述

      經過345大神的提醒,說覺得開發者頭條這個app不錯,用到了很多android中常用的技術,叫我寫一系列的文章,去模仿一個商業的app。于是我去下載了一個開發者頭條app(之前從未用過,是不是很out)。用了之后總結他的技術,打算以仿開發者頭條項目為主線寫一系列的Android開發教程 中間會穿插各種常用到的知識點模塊 最終完成這樣一個項目.

      廢話就說這么多了,開始今天的正題,帶你實現開發者頭條APP的啟動頁。

      一.老規矩,先上效果圖

      這里寫圖片描述
      從效果圖中我們可以看出,整個滑動的界面就是一個ViewPager實現,然后監聽ViewPager的滑動事件,改變底部四個小圖標的切換,以及跳轉到首頁的按鈕的隱藏顯示。

      二.代碼實現

      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,設置適配器,設置ViewPager滑動監聽,然后添加底部的。。。View。 在Viewpager監聽函數里面改變底部圖標的選中狀態,如果是最后一頁顯示“開啟我的頭條”按鈕。

      /**
       * 第一次啟動頁面
       * 
       * @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;// 設置點點點view的左邊距
      			layoutParams.rightMargin = 10;// 設置點點點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,在構造函數中初始化要顯示的所有頁面,其他的跟普通的適配器沒啥區別,就多了兩個重寫的方法,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我就不一一貼出來了。有興趣的可以自行去下載demo。

      三.源碼下載

      點擊下載源碼

      **推薦下自己創建的android QQ群: 202928390歡迎大家的加入. **

      如果你想第一時間看我們的后期文章,掃碼關注公眾號,每周不定期推送Android開發實戰教程文章,你還等什么,趕快關注吧,學好技術,,出任ceo,贏取白富美。。。。。。。。。。

            Android開發666 - 安卓開發技術分享
                  掃描二維碼加關注
      

      互聯網動態

      posted @ 2016-04-16 21:43  安輝  閱讀(2535)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 日韩精品人妻黄色一级片| 色悠悠国产在线视频一线| 亚洲精品乱码久久久久久蜜桃| 国产免费一区二区三区在线观看| 正在播放国产对白孕妇作爱| 国产一区二区三区尤物视频| 无码内射中文字幕岛国片| 无码人妻精品一区二区三区下载| 国产精品久久久久乳精品爆| 日韩一区二区三区精彩视频| 无码视频伊人| 精品国产伦理国产无遮挡| 亚洲另类无码一区二区三区| 久久精品女人的天堂av| 免费激情网址| 亚洲国产精品毛片在线看| 免费十八禁一区二区三区| 熟妇人妻av无码一区二区三区| 国产成人无码免费视频麻豆| 南丹县| 亚洲激情视频一区二区三区| 日韩精品亚洲专在线电影| 日韩精品区一区二区三vr| 日产国产一区二区不卡| 中文字幕日韩有码国产| 亚洲欧美精品一中文字幕| 国产精品激情av在线播放| 国产偷人妻精品一区二区在线| 国产又黄又爽又不遮挡视频| 日日爽日日操| 国产爆乳无码av在线播放| 国产真实精品久久二三区| 狠狠综合久久综合88亚洲| 久久久久免费看成人影片| 色婷婷欧美在线播放内射| 久久精品国产一区二区三区不卡 | 天堂V亚洲国产V第一次| 国产精品自在拍首页视频| 粉嫩小泬无遮挡久久久久久| 久久精品国产91精品亚洲| 小伙无套内射老熟女精品|