欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

ViewPager實現(xiàn)引導(dǎo)界面,引導(dǎo)的指針點(Dot)帶移動動 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設(shè)-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設(shè)/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當(dāng)前位置>首頁 » 新聞資訊 » 技術(shù)分享 >

ViewPager實現(xiàn)引導(dǎo)界面,引導(dǎo)的指針點(Dot)帶移動動

發(fā)表時間:2020-10-19

發(fā)布人:葵宇科技

瀏覽次數(shù):54

近期在用很多軟件時發(fā)明,很多軟件都有效戶引導(dǎo)畫面,根本上就是幾張圖片用來滑動,并且每張圖片上都有一個引導(dǎo)的指針點,然則很多軟件(包含一些大年夜公司的軟件)引導(dǎo)的指針都是沒有動畫的,甚至是畫在圖片上的,每次看到這都感到對用戶很不好,今天駒萃C鶇一個指針帶移動動畫的引導(dǎo)界面,今河琶來就用。
</pre><pre name="code" class="java">package com.example.tiyan_test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
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.OnPreDrawListener;
import android.view.Window;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 * @author jiantoa88
 * 
 */
public class MainActivity extends Activity implements OnPageChangeListener {
	// 動態(tài)添加圖片,只需將圖片保存在數(shù)組中即可
	private int[] guides = { R.drawable.g1, R.drawable.g2, R.drawable.g3,
			R.drawable.g4 };
	private static final int TO_END = 0;// 設(shè)置標記 當(dāng)達到最后一張時
	private static final int LEAVE_FROAM_END = 1;// 當(dāng)分開最后一張時
	private List<View> guider_views = new ArrayList<View>();
	private ViewPager viewPager;
	private ImageView iv_start;
	private ImageView iv_currentDot;// 當(dāng)前的坐標點
	private LinearLayout dotLayout;// 儲存點的容器
	private int offset;// 記錄坐標點的位移量
	private int currentPos = 0;// 記錄當(dāng)前的地位
	private GuidePaperAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		initView();
	}

	private void initView() {
		// TODO Auto-generated method stub
		dotLayout = (LinearLayout) findViewById(R.id.dot_contain);
		viewPager = (ViewPager) findViewById(R.id.viewPager);
		iv_currentDot = (ImageView) findViewById(R.id.cur_dot);
		iv_start = (ImageView) findViewById(R.id.open);
		iv_start.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "點擊了體驗", Toast.LENGTH_SHORT)
						.show();
			}
		});

		initDot();
		initGuide();
		// 當(dāng)iv_currentDot的地點的樹形層次將要被繪出時 此辦法被調(diào)用
		iv_currentDot.getViewTreeObserver().addOnPreDrawListener(
				new OnPreDrawListener() {

					@Override
					public boolean onPreDraw() {
						// TODO Auto-generated method stub
						// 獲取點圖片的寬度,點的移動動畫時用
						offset = iv_currentDot.getWidth();
						return true;
					}
				});
		adapter = new GuidePaperAdapter(guider_views);
		viewPager.setAdapter(adapter);
		viewPager.setOnPageChangeListener(this);
	}

	private void initGuide() {
		// TODO Auto-generated method stub
		guider_views.clear();
		ImageView view = null;
		for (int i = 0; i < guides.length; i++) {
			view = buildImageView(guides[i]);
			guider_views.add(view);
		}
	}

	/**
	 * @param id
	 * @return 初始化guide的 view
	 */
	private ImageView buildImageView(int id) {
		ImageView iv = new ImageView(this);
		iv.setImageResource(id);
		ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(
				ViewGroup.LayoutParams.MATCH_PARENT,
				ViewGroup.LayoutParams.MATCH_PARENT);
		iv.setLayoutParams(params);
		iv.setScaleType(ScaleType.FIT_XY);
		return iv;
	}

	/**
	 * * 初始化點 ImageVIew
	 * 
	 * @return 返回true解釋初始化獲成功,不然實例化掉敗
	 */
	private boolean initDot() {
		if (guides.length > 0) {
			ImageView dotView;
			for (int i = 0; i < guides.length; i++) {
				dotView = new ImageView(this);
				dotView.setImageResource(R.drawable.dot1_w);
				dotView.setLayoutParams(new LinearLayout.LayoutParams(
						ViewGroup.LayoutParams.WRAP_CONTENT,
						ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
				dotLayout.addView(dotView);
			}
			return true;
		} else {
			return false;
		}
	}

	class GuidePaperAdapter extends PagerAdapter {
		private List<View> views;

		public GuidePaperAdapter(List<View> views) {
			super();
			this.views = views;
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return views.size();
		}

		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			// TODO Auto-generated method stub
			View view = views.get(position);
			container.addView(view);
			return view;
		}

		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			// TODO Auto-generated method stub
			// super.destroyItem(container, position, object);
			container.removeView(views.get(position));
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			// TODO Auto-generated method stub
			return arg0 == arg1;
		}

	}

	/**
	 * 用handler通知iv_start 顯示
	 */
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			if (msg.what == TO_END) {
				iv_start.setVisibility(View.VISIBLE);
			} else if (msg.what == LEAVE_FROAM_END) {
				iv_start.setVisibility(View.GONE);
			}
		};
	};

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

	}

	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
		// TODO Auto-generated method stub

	}

	@Override
	public void onPageSelected(int position) {
		// 在此設(shè)置dot的移動動畫
		moveCursorTo(position);
		// 當(dāng)?shù)阶詈笠粡垥r
		if (position == guides.length - 1) {
			handler.sendEmptyMessage(TO_END);
		} else {
			handler.sendEmptyMessage(LEAVE_FROAM_END);
		}
		currentPos = position;
	}

	/**
	 * 滑動時 坐標點點移動動畫
	 * 
	 * @param position
	 */
	private void moveCursorTo(int position) {
		AnimationSet animationSet = new AnimationSet(true);
		TranslateAnimation translateAnimation = new TranslateAnimation(offset
				* currentPos, offset * position, 0, 0);
		animationSet.addAnimation(translateAnimation);
		animationSet.setDuration(300);
		animationSet.setFillAfter(true);
		iv_currentDot.startAnimation(animationSet);
	}
}

代碼下載:http://download.csdn.net/detail/a_tao123/8331975
GitHub : https://github.com/jiantao88/Guide

 

相關(guān)案例查看更多