做了一个简单的 引导页 重点其实 是 引导页下面的点随着页面滑动,上图
请参考:http://blog.csdn.net/wanghao200906/article/details/45536761
就是 三个点 固定 一个点 滑动 算出来 每个点间隔距离 然后通过 公式算出 滑动多少 小红点 移动多少。其实很简单 下面是核心代码
SmartActivity就是一个 自己定义的 baseactivity
1. 监听布局加载,加载完了 获取并计算两个静态点的距离 。
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);
}
}
}
原文地址:http://blog.csdn.net/wanghao200906/article/details/45537713