第一步:新建Android工程ViewFlipperDemo:

基于ViewFlipper实现的自定义新手指引控件._第1张图片

第二步:新建AdverView.java代码如下:

[java] view plain copy
  1. packagecom.tutor.viewflipper;
  2. importandroid.content.Context;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.BitmapFactory;
  5. importandroid.util.AttributeSet;
  6. importandroid.view.Gravity;
  7. importandroid.view.MotionEvent;
  8. importandroid.view.animation.Animation;
  9. importandroid.view.animation.TranslateAnimation;
  10. importandroid.widget.FrameLayout;
  11. importandroid.widget.ImageView;
  12. importandroid.widget.LinearLayout;
  13. importandroid.widget.ViewFlipper;
  14. /**
  15. *@authorfrankiewei.
  16. *广告推荐插件,可以自定义img个数.
  17. */
  18. publicclassAdvserViewextendsFrameLayout{
  19. /**
  20. *当前索引值.默认第一张图片被选中.
  21. */
  22. privateintmCurrentIndex=0;
  23. /**
  24. *上下文.
  25. */
  26. privateContextmContext;
  27. /**
  28. *点击屏幕的X左边值.
  29. */
  30. privatefloatstartX;
  31. /**
  32. *设备的宽度.
  33. */
  34. privateintmDisplayWidth;
  35. /**
  36. *从左到右进入的动画.
  37. */
  38. privateAnimationmLeft2RightInAnimation;
  39. /**
  40. *从左到右出去动画.
  41. */
  42. privateAnimationmLeft2RightOutAnimation;
  43. /**
  44. *从右到左进入动画.
  45. */
  46. privateAnimationmRight2LeftInAnimation;
  47. /**
  48. *从右到左出去动画.
  49. */
  50. privateAnimationmRight2LeftOutAnimation;
  51. /**
  52. *动画播放时间.
  53. */
  54. privatelongduration=1000;
  55. /**
  56. *ViewFlipper控件,继承FrameLayout,图片的容器.
  57. */
  58. privateViewFlippermViewFlipper;
  59. /**
  60. *下面动态生成点点tip的容器.
  61. */
  62. privateLinearLayoutmTipLinearLayout;
  63. /**
  64. *正常点点的Bitmap.
  65. */
  66. privateBitmapmPointNorBitmap;
  67. /**
  68. *被选中的点点的Bitmap.
  69. */
  70. privateBitmapmPointSelBitmap;
  71. /**
  72. *这里是要显示的广告图片的资源ID,可以自定义个数.
  73. */
  74. privateint[]imgResIds={R.drawable.test1,R.drawable.test2,R.drawable.test3,
  75. R.drawable.test4,R.drawable.test5};
  76. publicAdvserView(Contextcontext){
  77. super(context);
  78. setupViews();
  79. }
  80. publicAdvserView(Contextcontext,AttributeSetattr){
  81. super(context,attr);
  82. setupViews();
  83. }
  84. privatevoidsetupViews(){
  85. mContext=getContext();
  86. mDisplayWidth=getResources().getDisplayMetrics().widthPixels;
  87. mViewFlipper=newViewFlipper(mContext);
  88. mTipLinearLayout=newLinearLayout(mContext);
  89. mPointNorBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.point_normal);
  90. mPointSelBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.point_selected);
  91. //将广告图片加入ViewFlipper.
  92. for(inti=0;i<imgResIds.length;i++){
  93. ImageViewimageView=newImageView(mContext);
  94. imageView.setImageResource(imgResIds[i]);
  95. mViewFlipper.addView(imageView);
  96. }
  97. //将点点动态加入Linerlayout.
  98. for(intj=0;j<imgResIds.length;j++){
  99. ImageViewimageview=newImageView(mContext);
  100. if(j==0){
  101. imageview.setImageBitmap(mPointSelBitmap);
  102. }else{
  103. imageview.setImageBitmap(mPointNorBitmap);
  104. }
  105. mTipLinearLayout.addView(imageview);
  106. }
  107. addView(mViewFlipper);
  108. addView(mTipLinearLayout);
  109. mTipLinearLayout.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);
  110. //初始化动画.
  111. mLeft2RightInAnimation=newTranslateAnimation(-mDisplayWidth,0,0,0);
  112. mLeft2RightInAnimation.setDuration(duration);
  113. mLeft2RightOutAnimation=newTranslateAnimation(0,mDisplayWidth,0,0);
  114. mLeft2RightOutAnimation.setDuration(duration);
  115. mRight2LeftInAnimation=newTranslateAnimation(mDisplayWidth,0,0,0);
  116. mRight2LeftInAnimation.setDuration(duration);
  117. mRight2LeftOutAnimation=newTranslateAnimation(0,-mDisplayWidth,0,0);
  118. mRight2LeftOutAnimation.setDuration(duration);
  119. }
  120. @Override
  121. publicbooleanonTouchEvent(MotionEventevent){
  122. switch(event.getAction()){
  123. caseMotionEvent.ACTION_DOWN:
  124. startX=event.getX();
  125. break;
  126. caseMotionEvent.ACTION_UP:
  127. ImageViewlastSelImageView=(ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);
  128. //判断左右滑动切换图片.
  129. if(event.getX()>startX){
  130. mViewFlipper.setInAnimation(mLeft2RightInAnimation);
  131. mViewFlipper.setOutAnimation(mLeft2RightOutAnimation);
  132. mViewFlipper.showNext();
  133. mCurrentIndex++;
  134. if(mCurrentIndex>imgResIds.length-1){
  135. mCurrentIndex=0;
  136. }
  137. }elseif(event.getX()<startX){
  138. mViewFlipper.setInAnimation(mRight2LeftInAnimation);
  139. mViewFlipper.setOutAnimation(mRight2LeftOutAnimation);
  140. mViewFlipper.showPrevious();
  141. mCurrentIndex--;
  142. if(mCurrentIndex<0){
  143. mCurrentIndex=imgResIds.length-1;
  144. }
  145. }
  146. ImageViewimageview=(ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);
  147. imageview.setImageBitmap(mPointSelBitmap);
  148. lastSelImageView.setImageBitmap(mPointNorBitmap);
  149. break;
  150. default:
  151. break;
  152. }
[java] view plain copy
  1. returntrue;
  2. }
  3. }
第三步:修改ViewFlipperDemoActivity.java代码如下:

[java] view plain copy
  1. packagecom.tutor.viewflipper;
  2. importandroid.app.Activity;
  3. importandroid.os.Bundle;
  4. publicclassViewFlipperDemoActivityextendsActivity{
  5. @Override
  6. publicvoidonCreate(BundlesavedInstanceState){
  7. super.onCreate(savedInstanceState);
  8. setContentView(newAdvserView(this));
  9. }
  10. }
第四步:运行效果如下:


基于ViewFlipper实现的自定义新手指引控件._第2张图片基于ViewFlipper实现的自定义新手指引控件._第3张图片

更多相关文章

  1. Android---63---Android中的动画效果
  2. Android前端开发15:显示网络图片
  3. Android Retrofit 图片上传的最简单和明白的实现方式
  4. 分享Android仿刮奖效果控件
  5. Android 属性动画实现的扇形菜单效果
  6. Android设置桌面背景图片的方法
  7. Android用属性动画拖动view到任意位置
  8. 【Android UI】自定义圆形Loading动画

随机推荐

  1. 收集android上开源的酷炫的交互动画和视
  2. 移动android的AI总结
  3. Android自动化测试之monkeyrunner基本要
  4. 整理出来的一些Android基础知识
  5. input 之我见1
  6. 2010.12.14——— android 应用的自动更
  7. Google Android admob
  8. android图片闪烁或帧动画
  9. Mac下完全卸载干净Android Studio
  10. msm8916 lcd 相关调试点指导