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

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

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

      Android實現(xiàn)左右滑動指引效果

        本文介紹Android中實現(xiàn)左右滑動的指引效果。

       

        關于左右滑動效果,我在以前的一篇博文中提到過,有興趣的朋友可以查看:http://www.rzrgm.cn/hanyonglu/archive/2012/02/13/2349827.html 

       

        如果想實現(xiàn)帶漸顯按鈕的左右滑動效果,請訪問博文:http://www.rzrgm.cn/hanyonglu/archive/2012/02/13/2350171.html

       

        本文的目的是要實現(xiàn)左右滑動的指引效果。那么什么是指引效果呢?現(xiàn)在的應用為了有更好的用戶體驗,一般會在應用開始顯示一些指引幫助頁面,使用戶能更好的理解應用的功能,甚至是一些新聞閱讀器會把一些頭條新聞以指引效果的形式顯示。說個最基本的,就是我們的手機主屏幕就是這種效果。

       

        下面我們就開始實現(xiàn)我們的左右滑動指引效果。為了大家更好的理解,我們先看下實現(xiàn)效果,如下圖所示:

       


       

       

        

       

        在這里,我們需要用到google提到的一個包——android-support-v4.jar,這個包包含了一些非常有用的類,其中就是ViewPager類來實現(xiàn)頁面之間的切換操作,關于android-support-v4.jar的詳細信息,大家可以訪問google官方網(wǎng)站:http://developer.android.com/sdk/compatibility-library.html

       

        首先我們先看下項目結構:

       

         

       

        在上圖項目結構中,我們需要首先引入android-support-v4.jar包。下面讓我們看一下代碼實現(xiàn)。

       

        核心實現(xiàn)代碼如下所示:

      package com.test.guide;
      import java.util.ArrayList;

      import android.app.Activity;
      import android.os.Bundle;
      import android.os.Parcelable;
      import android.support.v4.view.PagerAdapter;
      import android.support.v4.view.ViewPager;
      import android.support.v4.view.ViewPager.OnPageChangeListener;
      import android.view.LayoutInflater;
      import android.view.View;
      import android.view.ViewGroup;
      import android.view.Window;
      import android.view.ViewGroup.LayoutParams;
      import android.widget.ImageView;

      /**
       * Android實現(xiàn)左右滑動指引效果
       * @Description: Android實現(xiàn)左右滑動指引效果

       * @File: MyGuideViewActivity.java

       * @Package com.test.guide

       * @Author Hanyonglu

       * @Date 2012-4-6 下午11:15:18

       * @Version V1.0
       
      */
      public class MyGuideViewActivity extends Activity {
           private ViewPager viewPager;  
           private ArrayList<View> pageViews;  
           private ImageView imageView;  
           private ImageView[] imageViews; 
           // 包裹滑動圖片LinearLayout
           private ViewGroup main;
           // 包裹小圓點的LinearLayout
           private ViewGroup group;
              
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              // 設置無標題窗口
              requestWindowFeature(Window.FEATURE_NO_TITLE);
              
              LayoutInflater inflater = getLayoutInflater();  
              pageViews = new ArrayList<View>();  
              pageViews.add(inflater.inflate(R.layout.item05, null));
              pageViews.add(inflater.inflate(R.layout.item06, null));
              pageViews.add(inflater.inflate(R.layout.item01, null));  
              pageViews.add(inflater.inflate(R.layout.item02, null));  
              pageViews.add(inflater.inflate(R.layout.item03, null));  
              pageViews.add(inflater.inflate(R.layout.item04, null));  
              
              imageViews = new ImageView[pageViews.size()];  
              main = (ViewGroup)inflater.inflate(R.layout.main, null);  
              
              group = (ViewGroup)main.findViewById(R.id.viewGroup);  
              viewPager = (ViewPager)main.findViewById(R.id.guidePages);  
              
              for (int i = 0; i < pageViews.size(); i++) {  
                  imageView = new ImageView(MyGuideViewActivity.this);  
                  imageView.setLayoutParams(new LayoutParams(20,20));  
                  imageView.setPadding(20, 0, 20, 0);  
                  imageViews[i] = imageView;  
                  
                  if (i == 0) {  
                      //默認選中第一張圖片
                      imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);  
                  } else {  
                      imageViews[i].setBackgroundResource(R.drawable.page_indicator);  
                  }  
                  
                  group.addView(imageViews[i]);  
              }  
              
              setContentView(main);
              
              viewPager.setAdapter(new GuidePageAdapter());  
              viewPager.setOnPageChangeListener(new GuidePageChangeListener());  
          }
          
          // 指引頁面數(shù)據(jù)適配器
          class GuidePageAdapter extends PagerAdapter {  
              
              @Override  
              public int getCount() {  
                  return pageViews.size();  
              }  
        
              @Override  
              public boolean isViewFromObject(View arg0, Object arg1) {  
                  return arg0 == arg1;  
              }  
        
              @Override  
              public int getItemPosition(Object object) {  
                  // TODO Auto-generated method stub  
                  return super.getItemPosition(object);  
              }  
        
              @Override  
              public void destroyItem(View arg0, int arg1, Object arg2) {  
                  // TODO Auto-generated method stub  
                  ((ViewPager) arg0).removeView(pageViews.get(arg1));  
              }  
        
              @Override  
              public Object instantiateItem(View arg0, int arg1) {  
                  // TODO Auto-generated method stub  
                  ((ViewPager) arg0).addView(pageViews.get(arg1));  
                  return pageViews.get(arg1);  
              }  
        
              @Override  
              public void restoreState(Parcelable arg0, ClassLoader arg1) {  
                  // TODO Auto-generated method stub  
        
              }  
        
              @Override  
              public Parcelable saveState() {  
                  // TODO Auto-generated method stub  
                  return null;  
              }  
        
              @Override  
              public void startUpdate(View arg0) {  
                  // TODO Auto-generated method stub  
        
              }  
        
              @Override  
              public void finishUpdate(View arg0) {  
                  // TODO Auto-generated method stub  
        
              }  
          } 
          
          // 指引頁面更改事件監(jiān)聽器
          class GuidePageChangeListener implements OnPageChangeListener {  
                
              @Override  
              public void onPageScrollStateChanged(int arg0) {  
                  // TODO Auto-generated method stub  
        
              }  
        
              @Override  
              public void onPageScrolled(int arg0, float arg1, int arg2) {  
                  // TODO Auto-generated method stub  
        
              }  
        
              @Override  
              public void onPageSelected(int arg0) {  
                  for (int i = 0; i < imageViews.length; i++) {  
                      imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
                      
                      if (arg0 != i) {  
                          imageViews[i].setBackgroundResource(R.drawable.page_indicator);  
                      }  
                  }
              }  
          }  

       

        在以前的示例中,我們實現(xiàn)左右滑動效果時通常使用ViewFlipper來實現(xiàn),在這個示例中我使用的Google的android-support-v4.jar中的ViewPager類實現(xiàn)。在這里,我創(chuàng)建了6個頁面布局,也就是6個頁面之間的切換。首先需要把這個6個布局頁面加入到集合中以方便操作,如下代碼:

       LayoutInflater inflater = getLayoutInflater();  
       pageViews = new ArrayList<View>();  
       pageViews.add(inflater.inflate(R.layout.item05, null));
       pageViews.add(inflater.inflate(R.layout.item06, null));
       pageViews.add(inflater.inflate(R.layout.item01, null));  
       pageViews.add(inflater.inflate(R.layout.item02, null));  
       pageViews.add(inflater.inflate(R.layout.item03, null));  
       pageViews.add(inflater.inflate(R.layout.item04, null));  

       

        有幾個布局頁面就有幾個圓點圖片,如下代碼:

       imageViews = new ImageView[pageViews.size()];

       

        通過for循環(huán)設置圓點圖片的布局,如下代碼:

      for (int i = 0; i < pageViews.size(); i++) {  
                  imageView = new ImageView(MyGuideViewActivity.this);  
                  imageView.setLayoutParams(new LayoutParams(20,20));  
                  imageView.setPadding(20, 0, 20, 0);  
                  imageViews[i] = imageView;  
                  
                  if (i == 0) {  
                      //默認選中第一張圖片
                      imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);  
                  } else {  
                      imageViews[i].setBackgroundResource(R.drawable.page_indicator);  
                  }  
                  
                  group.addView(imageViews[i]);  
        } 

       

        然后再為ViewPager設置數(shù)據(jù)適配器和頁面切換事件監(jiān)聽器,如下代碼:

        viewPager.setAdapter(new GuidePageAdapter());  
        viewPager.setOnPageChangeListener(new GuidePageChangeListener());

        

        在指引頁面數(shù)據(jù)適配器中要在回調函數(shù)中控制好頁面的初始化及銷毀操作等,具體看上面的代碼。

       

        在指引頁面更改事件監(jiān)聽器(GuidePageChangeListener)中要確保在切換頁面時下面的圓點圖片也跟著改變,如下代碼:

      @Override  
      public void onPageSelected(int arg0) {  
            for (int i = 0; i < imageViews.length; i++) {  
                 imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
                      
                 if (arg0 != i) {  
                      imageViews[i].setBackgroundResource(R.drawable.page_indicator);  
                 }  
             }
      }

       

        下面是布局界面的代碼,item.xml代碼如下:

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width
      ="fill_parent"
          android:layout_height
      ="fill_parent"
          android:orientation
      ="vertical" >

          <LinearLayout
              
      android:id="@+id/linearLayout01"
              android:layout_width
      ="match_parent"
              android:layout_height
      ="wrap_content"
              android:orientation
      ="vertical" >

          </LinearLayout>    
          
          <LinearLayout
              
      android:id="@+id/linearLayout02"
              android:layout_width
      ="match_parent"
              android:layout_height
      ="wrap_content"
              android:orientation
      ="vertical" 
              android:background
      ="@drawable/divider_horizontal_line">
              
          </LinearLayout>
          
          <LinearLayout
              
      android:id="@+id/linearLayout1"
              android:layout_width
      ="match_parent"
              android:layout_height
      ="wrap_content"
              android:orientation
      ="vertical" >

              <ImageView
                  
      android:layout_width="fill_parent"
                  android:layout_height
      ="wrap_content"
                  android:background
      ="@drawable/feature_guide_0" >
              </ImageView>
          </LinearLayout>

          <LinearLayout
              
      android:id="@+id/linearLayout2"
              android:layout_width
      ="wrap_content"
              android:layout_height
      ="wrap_content"
              android:orientation
      ="vertical"
              android:background
      ="@drawable/bg" >
              
              <LinearLayout
                  
      android:id="@+id/linearLayout2"
                  android:layout_width
      ="wrap_content"
                  android:layout_height
      ="wrap_content"
                  android:orientation
      ="vertical"
                  android:layout_marginTop
      ="30px"
                  android:layout_marginBottom
      ="30px"
                  android:layout_marginLeft
      ="30px"
                  android:layout_marginRight
      ="30px"
                  android:background
      ="@drawable/divider_horizontal_line" >
              </LinearLayout>

              <LinearLayout
                  
      android:id="@+id/linearLayout3"
                  android:layout_width
      ="match_parent"
                  android:layout_height
      ="wrap_content"
                  android:orientation
      ="vertical" >

                  <TextView
                      
      android:id="@+id/textView1"
                      android:layout_width
      ="wrap_content"
                      android:layout_height
      ="wrap_content"
                      android:textColor
      ="#000000"
                      android:paddingLeft
      ="30px"
                      android:paddingRight
      ="30px"
                      android:text
      ="@string/text1" />
              
              </LinearLayout>
          
          </LinearLayout>

      </LinearLayout>  


        在最上方的導航是一個單獨的布局,通過include標簽引用。

      <include android:id="@+id/item_header"
                      layout="@layout/item_header" />

       

        說到這里了,有的朋友可能就要問了:你實現(xiàn)的效果很棒,那怎么樣在界面上實現(xiàn)按鈕或其它View的監(jiān)聽事件呢?對于這樣一個問題,大家需要注意的是:不能直接使用findViewById()方法獲取View。因為在加載布局界面時的代碼是:

      main = (ViewGroup)inflater.inflate(R.layout.main, null);  
      setContentView(main);

       

        而main.xml中沒有我們設置的View,我們設置的View是在item01.xml或其它的布局中,所以應該使用如下代碼設置view的監(jiān)聽事件:

      View v1 = inflater.inflate(R.layout.item01, null);
      tv1 = (TextView)v1.findViewById(R.id.textView1);
      tv1.setOnClickListener(new TextView1OnClickListener());

       

        此處我是以TextView為例,所以應該使用如上方法監(jiān)聽相應的View事件,還有一點需要說明的是:需要將上方子界面添加到集合中代碼修改,將如下代碼

      pageViews.add(inflater.inflate(R.layout.item01, null));  

       

        修改為如下:

      View v1 = inflater.inflate(R.layout.item01, null);
      pageViews.add(v1);  

       

        這樣便可實現(xiàn)界面的上View的監(jiān)聽事件了。

        以上便是在Android中實現(xiàn)左右滑動指引效果的步驟,當然還可以使用其它的方法來實現(xiàn)這種效果,有興趣的朋友可以去網(wǎng)上查找相關資料,這里不再詳述。

       

        最后,希望轉載的朋友能夠尊重作者的勞動成果,加上轉載地址:http://www.rzrgm.cn/hanyonglu/archive/2012/04/07/2435589.html 謝謝。

       

        示例下載:點擊下載

       

        帶View的事件監(jiān)聽示例下載:點擊下載

       

        完畢。^_^

       

      posted @ 2012-04-07 03:51  Healtheon  閱讀(102326)  評論(111)    收藏  舉報
      主站蜘蛛池模板: 日韩精品一二三黄色一级| 风流少妇bbwbbw69视频| 蜜臀午夜一区二区在线播放| 午夜激情小视频一区二区| 在线亚洲妇色中文色综合 | 无码人妻aⅴ一区二区三区蜜桃 | 亚洲国产成人久久一区久久 | 中日韩黄色基地一二三区| 亚洲av色香蕉一区二区三区精品| 欧美人与禽2o2o性论交| 精品国产成人亚洲午夜福利| 久久久久国产精品熟女影院| 西乌珠穆沁旗| 国产精品第一页中文字幕| 精品无码久久久久久尤物| 欧美性插b在线视频网站| 午夜福利yw在线观看2020| 亚洲综合视频一区二区三区| 鲁丝片一区二区三区免费| 毛片内射久久久一区| 日韩区二区三区中文字幕| 亚洲欧美成人一区二区在线电影 | 午夜福利理论片高清在线| 国产不卡在线一区二区| 国产普通话对白刺激| 国产成人精品久久性色av| 亚洲一本二区偷拍精品| 最新高清无码专区| 色吊丝免费av一区二区| 亚洲欧美牲交| 亚洲欧美中文日韩在线v日本| 亚洲精品入口一区二区乱| 亚洲欧美综合中文| 国内少妇偷人精品视频| 日韩免费无码视频一区二区三区| 亚洲av激情久久精品人| 亚洲香蕉av一区二区蜜桃| 在线日韩日本国产亚洲| 日韩av一区二区三区不卡| 最近中文字幕免费手机版| 国产毛片基地|