基于ViewFlipper实现的自定义新手指引控件.
16lz
2021-01-23
第一步:新建Android工程ViewFlipperDemo:
第二步:新建AdverView.java代码如下:
- packagecom.tutor.viewflipper;
- importandroid.content.Context;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.util.AttributeSet;
- importandroid.view.Gravity;
- importandroid.view.MotionEvent;
- importandroid.view.animation.Animation;
- importandroid.view.animation.TranslateAnimation;
- importandroid.widget.FrameLayout;
- importandroid.widget.ImageView;
- importandroid.widget.LinearLayout;
- importandroid.widget.ViewFlipper;
- /**
- *@authorfrankiewei.
- *广告推荐插件,可以自定义img个数.
- */
- publicclassAdvserViewextendsFrameLayout{
- /**
- *当前索引值.默认第一张图片被选中.
- */
- privateintmCurrentIndex=0;
- /**
- *上下文.
- */
- privateContextmContext;
- /**
- *点击屏幕的X左边值.
- */
- privatefloatstartX;
- /**
- *设备的宽度.
- */
- privateintmDisplayWidth;
- /**
- *从左到右进入的动画.
- */
- privateAnimationmLeft2RightInAnimation;
- /**
- *从左到右出去动画.
- */
- privateAnimationmLeft2RightOutAnimation;
- /**
- *从右到左进入动画.
- */
- privateAnimationmRight2LeftInAnimation;
- /**
- *从右到左出去动画.
- */
- privateAnimationmRight2LeftOutAnimation;
- /**
- *动画播放时间.
- */
- privatelongduration=1000;
- /**
- *ViewFlipper控件,继承FrameLayout,图片的容器.
- */
- privateViewFlippermViewFlipper;
- /**
- *下面动态生成点点tip的容器.
- */
- privateLinearLayoutmTipLinearLayout;
- /**
- *正常点点的Bitmap.
- */
- privateBitmapmPointNorBitmap;
- /**
- *被选中的点点的Bitmap.
- */
- privateBitmapmPointSelBitmap;
- /**
- *这里是要显示的广告图片的资源ID,可以自定义个数.
- */
- privateint[]imgResIds={R.drawable.test1,R.drawable.test2,R.drawable.test3,
- R.drawable.test4,R.drawable.test5};
- publicAdvserView(Contextcontext){
- super(context);
- setupViews();
- }
- publicAdvserView(Contextcontext,AttributeSetattr){
- super(context,attr);
- setupViews();
- }
- privatevoidsetupViews(){
- mContext=getContext();
- mDisplayWidth=getResources().getDisplayMetrics().widthPixels;
- mViewFlipper=newViewFlipper(mContext);
- mTipLinearLayout=newLinearLayout(mContext);
- mPointNorBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.point_normal);
- mPointSelBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.point_selected);
- //将广告图片加入ViewFlipper.
- for(inti=0;i<imgResIds.length;i++){
- ImageViewimageView=newImageView(mContext);
- imageView.setImageResource(imgResIds[i]);
- mViewFlipper.addView(imageView);
- }
- //将点点动态加入Linerlayout.
- for(intj=0;j<imgResIds.length;j++){
- ImageViewimageview=newImageView(mContext);
- if(j==0){
- imageview.setImageBitmap(mPointSelBitmap);
- }else{
- imageview.setImageBitmap(mPointNorBitmap);
- }
- mTipLinearLayout.addView(imageview);
- }
- addView(mViewFlipper);
- addView(mTipLinearLayout);
- mTipLinearLayout.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL);
- //初始化动画.
- mLeft2RightInAnimation=newTranslateAnimation(-mDisplayWidth,0,0,0);
- mLeft2RightInAnimation.setDuration(duration);
- mLeft2RightOutAnimation=newTranslateAnimation(0,mDisplayWidth,0,0);
- mLeft2RightOutAnimation.setDuration(duration);
- mRight2LeftInAnimation=newTranslateAnimation(mDisplayWidth,0,0,0);
- mRight2LeftInAnimation.setDuration(duration);
- mRight2LeftOutAnimation=newTranslateAnimation(0,-mDisplayWidth,0,0);
- mRight2LeftOutAnimation.setDuration(duration);
- }
- @Override
- publicbooleanonTouchEvent(MotionEventevent){
- switch(event.getAction()){
- caseMotionEvent.ACTION_DOWN:
- startX=event.getX();
- break;
- caseMotionEvent.ACTION_UP:
- ImageViewlastSelImageView=(ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);
- //判断左右滑动切换图片.
- if(event.getX()>startX){
- mViewFlipper.setInAnimation(mLeft2RightInAnimation);
- mViewFlipper.setOutAnimation(mLeft2RightOutAnimation);
- mViewFlipper.showNext();
- mCurrentIndex++;
- if(mCurrentIndex>imgResIds.length-1){
- mCurrentIndex=0;
- }
- }elseif(event.getX()<startX){
- mViewFlipper.setInAnimation(mRight2LeftInAnimation);
- mViewFlipper.setOutAnimation(mRight2LeftOutAnimation);
- mViewFlipper.showPrevious();
- mCurrentIndex--;
- if(mCurrentIndex<0){
- mCurrentIndex=imgResIds.length-1;
- }
- }
- ImageViewimageview=(ImageView)mTipLinearLayout.getChildAt(mCurrentIndex);
- imageview.setImageBitmap(mPointSelBitmap);
- lastSelImageView.setImageBitmap(mPointNorBitmap);
- break;
- default:
- break;
- }
- returntrue;
- }
- }
- packagecom.tutor.viewflipper;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- publicclassViewFlipperDemoActivityextendsActivity{
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(newAdvserView(this));
- }
- }
更多相关文章
- Android---63---Android中的动画效果
- Android前端开发15:显示网络图片
- Android Retrofit 图片上传的最简单和明白的实现方式
- 分享Android仿刮奖效果控件
- Android 属性动画实现的扇形菜单效果
- Android设置桌面背景图片的方法
- Android用属性动画拖动view到任意位置
- 【Android UI】自定义圆形Loading动画