Android開発の案内ページの簡単な実現

9165 ワード

一、実現の構想
ウェルカムページのロードが完了した場合(一般的にはアニメーション)、すなわちウェルカムページのアニメーションのロードが完了した場合、ローカルストレージからレコードが最初に入ったかどうかを取り出し、ブートページまたはホームページに入り、最初に入った場合はブートページに入り、そうでなければホームページに入ります.
ブートページレイアウト使用:viewPager実装では、必要に応じて「体験開始」、「スキップ」ボタンなどを追加できます.レイアウトの下の位置はimgaeを使用してdrawableのshapeをovalに設定できます.ブートページのインジケータポイントとして、ページの数に応じて動的に追加できます.もちろん、必要に応じてブートページの自由スクロールも実現できます.
二、以下はページレイアウトです.



    

    

三、引导页面指示点的shape:

  
  
      
      
  

四、ウェルカムページコード:
        //            
        @Override
        public void onAnimationEnd(Animation animation) {

            //         --         
            boolean startMain = CacheUtils.getBoolean(WelcomeActivity.this, GuideActivity.START_MAIN);
            if (startMain) {

                startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
            } else {
                startActivity(new Intent(WelcomeActivity.this, GuideActivity.class));
            }

            finish();
        }

五、案内ページコード:
package com.atguigu.beijingnews.activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.atguigu.beijingnews.MainActivity;
import com.atguigu.beijingnews.R;
import com.atguigu.beijingnews.utils.CacheUtils;
import com.atguigu.beijingnews.utils.DensityUtil;
import com.atguigu.beijingnews.utils.LogUtil;

import java.util.ArrayList;

public class GuideActivity extends Activity {

    public static final String START_MAIN = "start_main";
    private ViewPager viewpager;
    private LinearLayout ll_point_group;
    private ImageView iv_red_point;
    private Button btn_start_main;

    private ArrayList imageViews;

    /**
     *       
     */
    private int leftMarg;
    private int widthDpi;

    /**
     *      -->     
     */
    private int ids[] = new int[]{
            R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);

        viewpager = (ViewPager) findViewById(R.id.viewpager);
        ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);
        iv_red_point = (ImageView) findViewById(R.id.iv_red_point);
        btn_start_main = (Button) findViewById(R.id.btn_start_main);

        initData();
    }

    /**
     *          
     */
    private void initData() {

        widthDpi = DensityUtil.dip2px(this, 10);
        LogUtil.e(widthDpi + "-----------------");

        imageViews = new ArrayList<>();

        for (int i = 0; i < ids.length; i++) {

            ImageView imageView = new ImageView(this);
            imageView.setBackgroundResource(ids[i]);

            //         
            imageViews.add(imageView);

            //      
            ImageView point = new ImageView(this);
            point.setImageResource(R.drawable.point_gray);

            //      
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(widthDpi, widthDpi);
            if (i != 0) {
                //    
                params.leftMargin = widthDpi;
            }
            point.setLayoutParams(params);

            ll_point_group.addView(point);

        }

        //     
        viewpager.setAdapter(new MyPagerAdapter());

        /**
         *    
         *     -->   (measure--onMeasure)--> layout-->onLayout-->draw-->onDraw
         */
        iv_red_point.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener());

        //  viewPager        
        viewpager.addOnPageChangeListener(new MyOnPageChangeListener());

        //      
        btn_start_main.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //        
                CacheUtils.putBoolean(GuideActivity.this, START_MAIN, true);
                //      
                startActivity(new Intent(GuideActivity.this, MainActivity.class));

                finish();//      
            }
        });
    }

    class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {

        /**
         * @param position                        
         * @param positionOffset                
         * @param positionOffsetPixels          
         */
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            //        = ViewPager      *   

//            float leftMargin = positionOffset * leftMarg;
            //   =      +        ;

            float leftMargin = (position + positionOffset) * leftMarg;
            RelativeLayout.LayoutParams paramgs = (RelativeLayout.LayoutParams) iv_red_point.getLayoutParams();
            //       
            paramgs.leftMargin = (int) leftMargin;
            iv_red_point.setLayoutParams(paramgs);

            LogUtil.e("position==" + position + ",positionOffset==" + positionOffset + ",positionOffsetPixels==" + positionOffsetPixels);


        }

        @Override
        public void onPageSelected(int position) {
            if (position == imageViews.size() - 1) {//             
                //     
                btn_start_main.setVisibility(View.VISIBLE);
            } else {
                //    
                btn_start_main.setVisibility(View.GONE);
            }

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    }

    class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener {

        @Override
        public void onGlobalLayout() {

            iv_red_point.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            //   =            -  0        
            leftMarg = ll_point_group.getChildAt(1).getLeft() - ll_point_group.getChildAt(0).getLeft();

        }
    }

    class MyPagerAdapter extends PagerAdapter {

        @Override
        public int getCount() {
            return imageViews.size();
        }

        /**
         * @param container viewPager  
         * @param position           
         * @return
         */
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = imageViews.get(position);
            container.addView(imageView);
            return imageView;
        }

        /**
         * @param view
         * @param object
         * @return
         */
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }

}

はい、今日の分かち合いはここまでで、みんなはどんな問題があって、私と交流することを歓迎します.