Android App使用指南的开发

本文详细介绍了如何在QQ通讯录应用中使用ViewFlipper组件来展示帮助图片和圆点指示器,通过滑动手势实现图片的前后翻转,并动态调整圆点颜色以指示当前图片的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用户正式使用APP之前,通常会做一个使用指南,提示用户在应该怎么操作或者增加了什么新功能,请看QQ通讯录的使用指南: 

guide01guide02

     用手指滑动切换图片 
     下方的点将改变颜色 
     暗示当前的图片在整组图片的位置.

 

 

 

 

 

 

我的解决办法:往ViewFlipper组件里面填充图片,在切换图片的时候,记录当前位置,默认从0开始,切换到下一张就加1,到上一张就减1,改变对应位置的ImageView的样式

首先准备5张已经制作好的帮助图,另外还有2张圆点图,一张是橙色,表示选中,一张是灰色,表示未被选中.

以下部分关键代码,配有注释: 

布局文件:

View Code
复制代码
<? xml version="1.0" encoding="utf-8" ?> 
< FrameLayout  xmlns:android ="http://schemas.android.com/apk/res/android%22
    android:layout_width="
fill_parent" 
    android:layout_height
="fill_parent"  
    android:gravity
="center"   >

     < ViewFlipper 
        
android:id ="@+id/viewFlipper"  
        android:layout_width
="fill_parent"  
        android:layout_height
="fill_parent"  
        android:flipInterval
="1000"  
        android:gravity
="center"  
        android:persistentDrawingCache
="animation"   > 
     </ ViewFlipper >

     < LinearLayout 
        
android:id ="@+id/layout_point"  
        android:layout_width
="fill_parent"  
        android:layout_height
="wrap_content"  
        android:layout_gravity
="bottom"  
        android:layout_marginBottom
="110dp"  
        android:gravity
="center"  
        android:orientation
="horizontal"   > 
     </ LinearLayout >

</ FrameLayout >
复制代码

这些图片可能在发布新版本后要更换,而且数量也可能会改变,于是采取动态的创建ImageView的办法,JAVA代码:

自定义的圆点ImageView:

View Code
复制代码
class PointImage  extends ImageView {
        LinearLayout.LayoutParams margins =  new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

         public PointImage(Context context) {
             super(context);
            margins.setMargins(20, 0, 0, 0);
            setLayoutParams(margins);
            normal();
        
        }

         public  void choose() {
            setBackgroundResource(R.drawable.app_tips_point_choose);
        }

         public  void normal() {
            setBackgroundResource(R.drawable.app_tips_point_normal);
        }

    }
复制代码

自定义的指南图ImageView:

View Code
复制代码
class GuideImage  extends ImageView {

         public GuideImage(Context context, Integer resId) {
             super(context);
            setImageResource(resId);
            setScaleType(ScaleType.FIT_XY);
        }

    }
复制代码

初始化activity的视图信息

View Code
复制代码
private  void initView() {
        mGestureDetector =  new GestureDetector( this);
        viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        layout_point = (LinearLayout) findViewById(R.id.layout_point);
        context = getApplicationContext();

         for ( int i = 0; i < guideId.length; i++) {
            PointImage pointImage =  new PointImage(context);
            GuideImage guideImage =  new GuideImage(context, guideId[i]);
             if (i == 0) {
                pointImage.choose();
            }
            layout_point.addView(pointImage);
            viewFlipper.addView(guideImage);

        }
    }
复制代码

实现OnGestureListener接口里面的onFling方法,执行滑动手势事件

View Code
复制代码
    @Override
     public  boolean onFling(MotionEvent e1, MotionEvent e2,  float velocityX,  float velocityY) {
        Log.i("kcl", "counter=" + counter);
         if (e1.getX() - e2.getX() > 80) {
            viewFlipper.setInAnimation(AnimationUtils.loadAnimation( this, R.anim.push_left_in));
            viewFlipper.setOutAnimation(AnimationUtils.loadAnimation( this, R.anim.push_left_out));
             if (counter < guideId.length-1) {
                viewFlipper.showNext();
                counter++;  // 记录位置
                setPointChoose();
            }  else {
                startActivity( new Intent(getApplication(), MainNavTab. class));
                 this.finish();
            }
             return  true;
        }  else  if (e1.getX() - e2.getX() < -80) {
            viewFlipper.setInAnimation(AnimationUtils.loadAnimation( this, R.anim.push_right_in));
            viewFlipper.setOutAnimation(AnimationUtils.loadAnimation( this, R.anim.push_right_out));
             if (counter > 0) {
                viewFlipper.showPrevious();
                counter--;
            }
            setPointChoose();
             return  true;
        }
         return  false;
    }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值