android 引导界面的设计

最近在研究如何做出仿微信,仿新浪等应用,第一次安装使用的使用展示应用程序的新特性和用法。

实现功能:左右手势滑屏

底部小圆点随当前显示页跳动

浮动按钮显示。当触屏事件发生显示,否则就渐渐消失

第一种: ViewFlipper + GestureDetector

第二种: ActivityGroup + GestureDetector

第三种: ViewPager (Android3.0+)

第四种: ViewFlow (开源项目)


话不多说,先放上效果图

向右滑动,或者点击按钮向右


怎么样,是不是很心动~~~!哈哈、


实现左右滑屏是需要一个叫做ViewPager的东西。具体ViewPager怎么用我就不赘述了。(PS注意导入ViewPager的兼容包)

接下来是代码:

首先在main.xml中声明ViewPager:

  1. <LinearLayout
  2. android:id="@+id/linearLayout01"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. android:orientation="vertical">
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/guidePages"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"/>
  10. lt;/LinearLayout>
     <LinearLayout
        android:id="@+id/linearLayout01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
	    <android.support.v4.view.ViewPager
	        android:id="@+id/guidePages"
	        android:layout_width="fill_parent"
	        android:layout_height="fill_parent"/>
    	
	   </LinearLayout>
  1. 和一个viewGroup放小圆点
和一个viewGroup放小圆点
  1. <LinearLayout
  2. android:id="@+id/viewGroup"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:layout_alignParentBottom="true"
  6. android:layout_marginBottom="40dp"
  7. android:gravity="center_horizontal"
  8. android:orientation="horizontal">
  9. </LinearLayout>
    <LinearLayout  
        android:id="@+id/viewGroup"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:layout_alignParentBottom="true"  
        android:layout_marginBottom="40dp"  
        android:gravity="center_horizontal"  
        android:orientation="horizontal" >  
        
    </LinearLayout>


接着在item01.xml等几个xml中放置要显示的图片,因为几个都一样,就不都贴上来了。

  1. <ImageView
  2. android:layout_width="fill_parent"
  3. android:layout_height="fill_parent"
  4. android:background="@drawable/feature_guide_0">
  5. </ImageView>
        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/feature_guide_0" >

        </ImageView>

接下来是核心代码:

  1. publicclassGuideViewActivityextendsActivity{
  2. privateViewPagerviewPager;
  3. privateArrayList<View>pageViews;
  4. privateImageViewimageView;
  5. privateImageView[]imageViews;
  6. //包裹滑动图片LinearLayout
  7. privateViewGroupmain;
  8. //包裹小圆点的LinearLayout
  9. privateViewGroupgroup;
  10. //左箭头按钮
  11. privateImageViewimageViewLeft;
  12. //右箭头按钮
  13. privateImageViewimageViewRight;
  14. //当前页码
  15. privateintcurrentIndex;
  16. //ImageView的alpha值
  17. privateintmAlpha=0;
  18. privatebooleanisHide;
  19. /**Calledwhentheactivityisfirstcreated.*/
  20. @Override
  21. publicvoidonCreate(BundlesavedInstanceState){
  22. super.onCreate(savedInstanceState);
  23. //将要显示的图片放到ArrayList当中,存到适配器中
  24. LayoutInflaterinflater=getLayoutInflater();
  25. pageViews=newArrayList<View>();
  26. pageViews.add(inflater.inflate(R.layout.item01,null));
public class GuideViewActivity extends Activity {
	

	private ViewPager viewPager;  
	 private ArrayList<View> pageViews;  
	 private ImageView imageView;  
	 private ImageView[] imageViews; 
	// 包裹滑动图片LinearLayout
	 private ViewGroup main;
	// 包裹小圆点的LinearLayout
	 private ViewGroup group;
	 //左箭头按钮
	 private ImageView imageViewLeft;
	 //右箭头按钮
	 private ImageView imageViewRight;
	 //当前页码
	 private int currentIndex;
	 
	 //ImageView的alpha值   
	 private int mAlpha = 0;
	 private boolean isHide;
	 
	    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	
        super.onCreate(savedInstanceState);

        //将要显示的图片放到ArrayList当中,存到适配器中
        LayoutInflater inflater = getLayoutInflater();  
        pageViews = new ArrayList<View>();  
        pageViews.add(inflater.inflate(R.layout.item01, null));
  1. ...
	...     
  1. imageViews=newImageView[pageViews.size()];
  2. main=(ViewGroup)inflater.inflate(R.layout.main,null);
  3. group=(ViewGroup)main.findViewById(R.id.viewGroup);
  4. viewPager=(ViewPager)main.findViewById(R.id.guidePages);
  5. imageViewLeft=(ImageView)main.findViewById(R.id.imageView1);
  6. imageViewRight=(ImageView)main.findViewById(R.id.imageView2);
  7. imageViewLeft.setAlpha(0);
  8. imageViewRight.setAlpha(0);
  9. //将小圆点放到imageView数组当中
  10. for(inti=0;i<pageViews.size();i++){
  11. imageView=newImageView(GuideViewActivity.this);
  12. imageView.setLayoutParams(newLayoutParams(20,20));
  13. imageView.setPadding(20,0,20,0);
  14. imageViews[i]=imageView;
  15. if(i==0){
  16. //默认选中第一张图片
  17. imageViews[i].setBackgroundResource(R.drawable.page_indicator_focused);
  18. }else{
  19. imageViews[i].setBackgroundResource(R.drawable.page_indicator);
  20. }
  21. group.addView(imageViews[i]);
  22. }
  23. setContentView(main);
  24. viewPager.setAdapter(newGuidePageAdapter());
  25. viewPager.setOnPageChangeListener(newGuidePageChangeListener());
  26. imageViewLeft.setOnClickListener(newButtonListener());
  27. imageViewRight.setOnClickListener(newButtonListener());
  28. }
  29. //左右切换屏幕的按钮监听器
  30. classButtonListenerimplementsOnClickListener{
  31. @Override
  32. publicvoidonClick(Viewv){
  33. //TODOAuto-generatedmethodstub
  34. intshowNext=0;
  35. if(v.getId()==R.id.imageView1){
  36. System.out.println("点击了向左的按钮");
  37. if(currentIndex==0)
  38. showNext=currentIndex;
  39. else
  40. showNext=currentIndex-1;
  41. viewPager.setCurrentItem(showNext);
  42. }
  43. if(v.getId()==R.id.imageView2){
  44. System.out.println("点击了向右的按钮");
  45. if(currentIndex==imageViews.length)
  46. showNext=currentIndex;
  47. else
  48. showNext=currentIndex+1;
  49. viewPager.setCurrentItem(showNext);
  50. }
  51. System.out.println("当前页码:"+showNext);
  52. }
  53. }
  54. /**
  55. *设置按钮渐显效果
  56. */
  57. privateHandlermHandler=newHandler()
  58. {
  59. publicvoidhandleMessage(Messagemsg){
  60. if(msg.what==1&&mAlpha<255){
  61. //通过设置不透明度设置按钮的渐显效果
  62. mAlpha+=50;
  63. if(mAlpha>255)
  64. mAlpha=255;
  65. imageViewLeft.setAlpha(mAlpha);
  66. imageViewLeft.invalidate();
  67. imageViewRight.setAlpha(mAlpha);
  68. imageViewRight.invalidate();
  69. if(!isHide&&mAlpha<255)
  70. mHandler.sendEmptyMessageDelayed(1,100);
  71. }elseif(msg.what==0&&mAlpha>0){
  72. mAlpha-=3;
  73. if(mAlpha<0)
  74. mAlpha=0;
  75. imageViewLeft.setAlpha(mAlpha);
  76. imageViewLeft.invalidate();
  77. imageViewRight.setAlpha(mAlpha);
  78. imageViewRight.invalidate();
  79. if(isHide&&mAlpha>0)
  80. mHandler.sendEmptyMessageDelayed(0,2);
  81. }
  82. }
  83. };
  84. privatevoidshowImageButtonView(){
  85. isHide=false;
  86. mHandler.sendEmptyMessage(1);
  87. }
  88. privatevoidhideImageButtonView(){
  89. newThread(){
  90. publicvoidrun(){
  91. try{
  92. isHide=true;
  93. mHandler.sendEmptyMessage(0);
  94. }catch(Exceptione){
  95. ;
  96. }
  97. }
  98. }.start();
  99. }
  100. @Override
  101. publicbooleandispatchTouchEvent(MotionEventev){
  102. System.out.println("thisisdispatch");
  103. System.out.println("触碰屏幕");
  104. switch(ev.getAction()){
  105. caseMotionEvent.ACTION_MOVE:
  106. caseMotionEvent.ACTION_DOWN:
  107. showImageButtonView();
  108. break;
  109. caseMotionEvent.ACTION_UP:
  110. hideImageButtonView();
  111. break;
  112. }
  113. returnsuper.dispatchTouchEvent(ev);
  114. }
  115. //指引页面数据适配器,实现适配器方法
  116. classGuidePageAdapterextendsPagerAdapter{
  117. @Override
  118. publicintgetCount(){
  119. returnpageViews.size();
  120. }
  121. @Override
  122. publicbooleanisViewFromObject(Viewarg0,Objectarg1){
  123. returnarg0==arg1;
  124. }
  125. @Override
  126. publicintgetItemPosition(Objectobject){
  127. //TODOAuto-generatedmethodstub
  128. returnsuper.getItemPosition(object);
  129. }
  130. @Override
  131. publicvoiddestroyItem(Viewarg0,intarg1,Objectarg2){
  132. //TODOAuto-generatedmethodstub
  133. ((ViewPager)arg0).removeView(pageViews.get(arg1));
  134. }
  135. @Override
  136. publicObjectinstantiateItem(Viewarg0,intarg1){
  137. //TODOAuto-generatedmethodstub
  138. ((ViewPager)arg0).addView(pageViews.get(arg1));
  139. returnpageViews.get(arg1);
  140. }
  141. @Override
  142. publicvoidrestoreState(Parcelablearg0,ClassLoaderarg1){
  143. //TODOAuto-generatedmethodstub
  144. }
  145. @Override
  146. publicParcelablesaveState(){
  147. //TODOAuto-generatedmethodstub
  148. returnnull;
  149. }
  150. @Override
  151. publicvoidstartUpdate(Viewarg0){
  152. //TODOAuto-generatedmethodstub
  153. }
  154. @Override
  155. publicvoidfinishUpdate(Viewarg0){
  156. //TODOAuto-generatedmethodstub
  157. }
  158. }
  159. //指引页面更改事件监听器,左右滑动图片时候,小圆点变换显示当前图片位置
  160. classGuidePageChangeListenerimplementsOnPageChangeListener{
  161. @Override
  162. publicvoidonPageScrollStateChanged(intarg0){
  163. //TODOAuto-generatedmethodstub
  164. }
  165. @Override
  166. publicvoidonPageScrolled(intarg0,floatarg1,intarg2){
  167. //TODOAuto-generatedmethodstub
  168. }
  169. @Override
  170. publicvoidonPageSelected(intarg0){
  171. currentIndex=arg0;
  172. for(inti=0;i<imageViews.length;i++){
  173. imageViews[arg0].setBackgroundResource(R.drawable.page_indicator_focused);
  174. if(arg0!=i){
  175. imageViews[i].setBackgroundResource(R.drawable.page_indicator);
  176. }
  177. }
  178. }
  179. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值