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{
コードのダウンロード
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);
}
}
)コードのダウンロード