【Android UI設計と開発】第02期:ブートインタフェース(二)ViewPagerを使用したウェルカムブートページ

9752 ワード

このシリーズの文章はすべて1つのプログラムの実例の開発を主線として説明して、1つの順序を追って漸進的な学習の効果を達成することを求めて、このように更にみんながプログラムに対してどうしてこのように書く意図を深めることができて、理論は実際の応用をプラスしてやっと事の半分の功倍の効果を達成することができて、そうではありませんか?
一番下にソースコードのダウンロードアドレスがあります.ほとんどのソースコードの行に注釈があります.分かりやすくて、はっきりしています.分からないことがあれば、伝言を残してください.本ブロガーはきっと全力を尽くして、皆さんのために問題に答えて困惑しています.皆さんの支持を望んでいます.はい、あまり言わないで、今日の本題に戻りましょう.
一、実現の効果図
このような习惯を身につけたのかも知れなくて、毎回他の人のコードを见る前に、必ず先に実现の効果図が1つのどんな効果を达成したことを见なければならなくて、自分が実现したい効果と似ているのではありませんか、図があってこそ真相がありますか、ほほほ.
二、符号化前の準備
ViewPagerはAndroid 3.0以降に提供される新しい特性なので、アプリケーションを下に互換化するにはandroid-support-v 4が必要です.JArというパッケージのサポートは、googleから提供された追加パッケージです.みんなで探せばいい.
三、プロジェクト構造図
四、具体的な符号化実現
1、レイアウトインタフェースは比較的に簡単で、ViewPagerコンポーネントを加えて、および底部の案内点、activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">  
      
     <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />  
      
     <LinearLayout
        android:id="@+id/ll"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="24.0dip"
        android:orientation="horizontal">  
       
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/point"/>  
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/point"/>  
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/point"/>  
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:clickable="true"
            android:padding="15.0dip"
            android:src="@drawable/point"/>  
    </LinearLayout>  
</RelativeLayout>

2、その中の小さい点のピクチャーは1つのselectorで色を制御して、point.xml:
<?xml version="1.0" encoding="UTF-8"?>  
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">  
    <item android:state_enabled="true" android:drawable="@drawable/point_normal" />  
    <item android:state_enabled="false" android:drawable="@drawable/point_select" />  
</selector>

3、ViewPagerアダプタコード、ViewPagerAdapter.java:
package com.yangyu;  
      
import java.util.ArrayList;  
      
import android.support.v4.view.PagerAdapter;  
import android.support.v4.view.ViewPager;  
import android.view.View;  
      
/** 
 * @author yangyu 
 *      :ViewPager   ,       view 
 */
public class ViewPagerAdapter extends PagerAdapter {  
          
    //      
    private ArrayList<View> views;  
          
    public ViewPagerAdapter (ArrayList<View> views){  
        this.views = views;  
    }  
             
    /** 
     *         
     */
    @Override
    public int getCount() {  
         if (views != null) {  
             return views.size();  
         }        
         return 0;  
    }  
      
    /** 
     *    position      
     */
    @Override
    public Object instantiateItem(View view, int position) {  
             
        ((ViewPager) view).addView(views.get(position), 0);  
             
        return views.get(position);  
    }  
          
    /** 
     *             
     */
    @Override
    public boolean isViewFromObject(View view, Object arg1) {  
        return (view == arg1);  
    }  
      
    /** 
     *   position      
     */
    @Override
    public void destroyItem(View view, int position, Object arg2) {  
        ((ViewPager) view).removeView(views.get(position));         
    }  
}

4、メインプログラム入口類、MainActivity.java:
package com.yangyu;  
      
import java.util.ArrayList;  
      
import android.app.Activity;  
import android.os.Bundle;  
import android.support.v4.view.ViewPager;  
import android.support.v4.view.ViewPager.OnPageChangeListener;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.ImageView;  
import android.widget.LinearLayout;  
      
import com.example.myguideview01.R;  
      
/** 
 * @author yangyu 
 *      :       
 */
public class MainActivity extends Activity implements OnClickListener,OnPageChangeListener {  
    //  ViewPager    
    private ViewPager viewPager;  
          
    //  ViewPager     
    private ViewPagerAdapter vpAdapter;  
          
    //    ArrayList   View  
    private ArrayList<View> views;  
      
    //        
        private static final int[] pics = {R.drawable.guide1,R.drawable.guide2,R.drawable.guide3,R.drawable.guide4};  
          
        //         
        private ImageView[] points;  
          
        //          
        private int currentIndex;  
          
    @Override
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
              
        initView();  
              
        initData();   
    }  
      
    /** 
     *       
     */
    private void initView(){  
        //   ArrayList    
        views = new ArrayList<View>();  
              
        //   ViewPager  
        viewPager = (ViewPager) findViewById(R.id.viewpager);  
              
        //   ViewPager     
        vpAdapter = new ViewPagerAdapter(views);  
    }  
          
    /** 
     *       
     */
    private void initData(){  
        //             
        LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,  
                                                                          LinearLayout.LayoutParams.FILL_PARENT);  
             
        //           
        for(int i=0; i<pics.length; i++) {  
            ImageView iv = new ImageView(this);  
            iv.setLayoutParams(mParams);  
            iv.setImageResource(pics[i]);  
            views.add(iv);  
        }   
              
        //      
        viewPager.setAdapter(vpAdapter);  
        //      
        viewPager.setOnPageChangeListener(this);  
              
        //         
        initPoint();  
    }  
          
    /** 
     *         
     */
    private void initPoint(){  
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.ll);         
              
        points = new ImageView[pics.length];  
      
        //          
        for (int i = 0; i < pics.length; i++) {  
            //    LinearLayout           
            points[i] = (ImageView) linearLayout.getChildAt(i);  
            //         
            points[i].setEnabled(true);  
            //           
            points[i].setOnClickListener(this);  
            //    tag,             
            points[i].setTag(i);  
        }  
              
        //           
        currentIndex = 0;  
        //     ,       
        points[currentIndex].setEnabled(false);  
    }  
          
    /** 
     *            
     */
    @Override
    public void onPageScrollStateChanged(int arg0) {  
      
    }  
          
    /** 
     *             
     */
      
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {  
      
    }  
          
    /** 
     *             
     */
      
    @Override
    public void onPageSelected(int position) {  
        //            
        setCurDot(position);  
    }  
      
    /** 
     *                
     */
    @Override
    public void onClick(View v) {  
         int position = (Integer)v.getTag();  
         setCurView(position);  
         setCurDot(position);         
    }  
      
    /** 
     *           
     */
    private void setCurView(int position){  
         if (position < 0 || position >= pics.length) {  
             return;  
         }  
         viewPager.setCurrentItem(position);  
     }  
      
     /** 
     *            
     */
    private void setCurDot(int positon){  
         if (positon < 0 || positon > pics.length - 1 || currentIndex == positon) {  
             return;  
         }  
         points[positon].setEnabled(false);  
         points[currentIndex].setEnabled(true);  
      
         currentIndex = positon;  
     }    
}

この文章は主にみんなに1つの簡単な例を実現させることができて、あなたのプログラムを先に動かして、やっと自信と勇気を持ってもっと複雑なUIの設計と開発に挑戦することができて、後のいくつかの章の中で、ブロガーも同様に生き生きと情熱的な説明で、みんなにもっと複雑なプレゼンテーションとコードを持ってきて、例えば微信をまねて、人人網の誘導インタフェースの開発、アニメーションの効果を加えて、運行してももっと眩しいです.
ソースダウンロードアドレス