Androidガイドページ赤点歳ページスライド


簡単なガイドページを作ったポイントは、実はガイドページの下の点がページに従ってスライドしていることです.上図は参考にしてください.http://blog.csdn.net/wanghao200906/article/details/45536761
3つの点を固定して1つの点をスライドさせ、各点の間隔距離を算出し、スライドの小赤点の移動量を式で算出します.実は簡単です.以下はコアコードSmartActivityが自分で定義したbaseactivityです.1.レイアウトのロードをリスニングし、取得した2つの静的ポイントの距離をロードして計算します.2.viewpagerスライドのリスニングイベントでは、何ページ目+スライドしても動的ポイントの位置がわかりません
“` package com.example.wang;
import java.util.ArrayList; import java.util.List;
import com.example.wang.utils.CacheUtils;
import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.LinearLayout.LayoutParams;
//***@author wang*@version作成日時:2015年5月6日午前11:28:46類説明*/public class GuideUI extends SmartActivity implements OnPageChangeListener,OnClickListener{
//       
private Button btnStartExperience;
private List<ImageView> imageViewList; // viewpager   
private LinearLayout llPointGroup; //    
private View mSelectPointView; //     view  
private int basicWidth; //       

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.guide);

    initView();
}

private void initView() {


    ViewPager mViewPager = getView(R.id.vp_guide);
    btnStartExperience = getView(R.id.btn_guide_start_experience);
    llPointGroup = getView(R.id.ll_guide_point_group);
    mSelectPointView = getView(R.id.select_point);
    initData();

    GuideAdapter mAdapter = new GuideAdapter();
    mViewPager.setAdapter(mAdapter);
    //     
    mViewPager.setOnPageChangeListener(this);
    //     
    btnStartExperience.setOnClickListener(this);

    // view    : measure -> layout -> draw
    //   mSelectPointView  layout
    ViewTreeObserver viewTreeObserver = mSelectPointView
            .getViewTreeObserver();
    //          ,          
    viewTreeObserver
            .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    //      ,                   
                    mSelectPointView.getViewTreeObserver()
                            .removeGlobalOnLayoutListener(this);
                    //           
                    basicWidth = llPointGroup.getChildAt(1).getLeft()
                            - llPointGroup.getChildAt(0).getLeft();
                    System.out.println("      : " + basicWidth);
                }
            });
}

private void initData() {

    int[] imageResIDs = { R.drawable.a, R.drawable.b,
            R.drawable.c };

    ImageView iv;
    View view;
    LayoutParams params;
    // ctrl + 2      L
    imageViewList = new ArrayList<ImageView>();

    for (int i = 0; i < imageResIDs.length; i++) {
        iv = new ImageView(this);
        iv.setBackgroundResource(imageResIDs[i]);
        //     
        imageViewList.add(iv);

         //        ,       LinearLayout      
        view = new View(this);
        view.setBackgroundResource(R.drawable.point_normal);
        // view    10
        params = new LayoutParams(20, 20);
        //          
        if (i != 0) {
            params.leftMargin = 20;
        }

        view.setLayoutParams(params);
        llPointGroup.addView(view);

    }
}

class GuideAdapter extends PagerAdapter {

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

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == arg1;
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView iv = imageViewList.get(position);
        // 1.  ViewPager     view  
        container.addView(iv);

        // 2.        view  
        return iv;
    }
}

@Override
public void onClick(View v) {

    //   IS_OPEN_MAIN_PAGER  ,         true
    CacheUtils.putBoolean(this, WelcomeUI.is_open_main_pager, true);

    //      
    gotoActivity(MainUI.class, true);
}

/**
 *       
 */
@Override
public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

}

/**
 *      position            positionOffset    positionOffsetPixels       
 */
@Override
public void onPageScrolled(int position, float positionOffset,
        int positionOffsetPixels) {
    System.out.println("position: " + position + ", positionOffset: "
            + positionOffset);

    // 20*(1+0.5)=30      
    int leftMargin = (int) (basicWidth * (position + positionOffset));

    RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) mSelectPointView
            .getLayoutParams();

    params.leftMargin = leftMargin;
    mSelectPointView.setLayoutParams(params);
}

/**
 *      
 */
@Override
public void onPageSelected(int arg0) {

    if (arg0 == imageViewList.size() - 1) {
        btnStartExperience.setVisibility(View.VISIBLE);
    } else {
        btnStartExperience.setVisibility(View.INVISIBLE);
    }
}
)
コードのダウンロード