知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
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)界面,今河琶來就用。
代碼下載:http://download.csdn.net/detail/a_tao123/8331975
GitHub : https://github.com/jiantao88/Guide
</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)案例查看更多
相關(guān)閱讀
- 云南軟件設(shè)計
- 云南網(wǎng)站建設(shè)高手
- 云南網(wǎng)站建設(shè)報價
- 報廢車
- 網(wǎng)站建設(shè)首選
- 百度小程序
- 云南省建設(shè)廳網(wǎng)站
- 人人商城
- 云南etc微信小程序
- 網(wǎng)站建設(shè)制作
- 云南企業(yè)網(wǎng)站
- 云南小程序制作
- 快排推廣
- 報廢車管理系統(tǒng)
- 報廢車回收
- 網(wǎng)絡(luò)公司聯(lián)系方式
- 電商網(wǎng)站建設(shè)
- 云南網(wǎng)站建設(shè)方案 doc
- 云南省建設(shè)廳網(wǎng)站官網(wǎng)
- 汽車報廢管理
- 云南建站公司
- 小程序開發(fā)平臺前十名
- 昆明小程序開發(fā)
- 汽車報廢回收管理軟件
- 小程序開發(fā)費用
- uniapp開發(fā)小程序
- 開發(fā)制作小程序
- 云南網(wǎng)絡(luò)營銷
- 微信小程序
- 云南網(wǎng)站建設(shè)開發(fā)