Android 中 ViewFlipper 的简单实例
2015-06-14 22:46
555 查看
main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Main" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" /> </RelativeLayout>
Main.java
package com.wty.mydemoviewflipper; import android.app.Activity; import android.os.Bundle; import com.wty.mydemoviewflipper.wiget.ViewFlipperView; public class Main extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new ViewFlipperView(this)); } }
IAdImages.java
package com.wty.mydemoviewflipper.wiget; import com.wty.mydemoviewflipper.R; /** * 图片信息接口 * @author vhreal * */ public interface IAdImages { /** * 广告图片 */ int[] adImages = { R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04, R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08, R.drawable.img09, R.drawable.img10 }; }
ViewFlipperView.java
package com.wty.mydemoviewflipper.wiget; import android.content.Context; import android.view.Gravity; import android.view.MotionEvent; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ViewFlipper; import com.wty.mydemoviewflipper.R; /** * 这是一个类似于ViewFlipper的Wiget。 * @author vhreal * */ public class ViewFlipperView extends FrameLayout implements IAdImages { private Context context; // 调用方的上下文 private int currentAdImgIndex; // 当前广告图片索引 private Animation left2RightInAnimation; // 广告图片从左到右进入屏幕动画 private Animation left2RightOutAnimation; // 广告图片从左到右出去屏幕动画 private Animation right2LeftInAnimation; // 广告图片从右到左进入屏幕动画 private Animation right2LeftOutAnimation; // 广告图片从右到左出去屏幕动画 private int animationDuration = 300; // 动画花费时间1000毫秒 private ViewFlipper mViewFlipper; // 滑动页面控件 private LinearLayout mTipLinearLayout; // 下方点点控件 private float startX = 0; // touch action down 时的x坐标 private float endX = 0; // touch action up 时的x坐标 public ViewFlipperView(Context context) { super(context); this.context = context; setView(); } /** * 显示View */ private void setView(){ // 初始化 int screenWidth = getResources().getDisplayMetrics().widthPixels; mViewFlipper = new ViewFlipper(context); mTipLinearLayout = new LinearLayout(context); // 初始化动画 left2RightInAnimation = new TranslateAnimation(-screenWidth, 0, 0, 0); left2RightInAnimation.setDuration(animationDuration); left2RightOutAnimation = new TranslateAnimation(0, screenWidth, 0, 0); left2RightOutAnimation.setDuration(animationDuration); right2LeftInAnimation = new TranslateAnimation(screenWidth, 0, 0, 0); right2LeftInAnimation.setDuration(animationDuration); right2LeftOutAnimation = new TranslateAnimation(0, -screenWidth, 0, 0); right2LeftOutAnimation.setDuration(animationDuration); // 将广告图片加入ViewFlipper for(int i=0; i<adImages.length; i++){ ImageView image = new ImageView(context); image.setImageResource(adImages[i]); mViewFlipper.addView(image); } addView(mViewFlipper); // 将图片索引点动态加入 for(int i=0; i<adImages.length; i++){ ImageView image = new ImageView(context); if(i == 0){ image.setImageResource(R.drawable.point_selected); }else{ image.setImageResource(R.drawable.point_normal); } image.setPadding(5, 0, 5, 20); mTipLinearLayout.addView(image); } // 放置在左下角 mTipLinearLayout.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL); addView(mTipLinearLayout); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); break; case MotionEvent.ACTION_UP: endX = event.getX(); // 先保存上一个点 ImageView lastTipImageView = (ImageView) mTipLinearLayout.getChildAt(currentAdImgIndex); if(currentAdImgIndex > 0 && endX > startX){// 查看前一页的广告 mViewFlipper.setInAnimation(left2RightInAnimation); mViewFlipper.setOutAnimation(left2RightOutAnimation); mViewFlipper.showPrevious(); currentAdImgIndex--; if(currentAdImgIndex < 0){ currentAdImgIndex = 0; } } if(currentAdImgIndex < adImages.length-1 && endX < startX){// 查看后一页的广告 mViewFlipper.setInAnimation(right2LeftInAnimation); mViewFlipper.setOutAnimation(right2LeftOutAnimation); mViewFlipper.showNext(); currentAdImgIndex++; if(currentAdImgIndex > adImages.length-1){ currentAdImgIndex = adImages.length-1; } } // 根据currentAdImgIndex改变底部点的状态 ImageView currTipImageView = (ImageView) mTipLinearLayout.getChildAt(currentAdImgIndex); lastTipImageView.setImageResource(R.drawable.point_normal); currTipImageView.setImageResource(R.drawable.point_selected); break; } return true; } }
相关文章推荐
- 使用Android Studio进行单元测试
- Android 坐标常识
- Android_照相机Camera_调用系统照相机返回data为空
- 关于Android四大组件之一broadcast receiver的详解(广播接收者)
- android studio上传代码到github
- Android优化系列——控件优化(ListView 异步加载图片优化,SoftReference)
- 关于Android四大组件之一Service
- Android学习8之图片按钮ImageButton
- Android loading data for android 5.0 出错的解决方法
- Android的一些常用命令提示符(cmd)指令
- Android Studio升级时遇到的问题。
- Android学习7之ImageView组件
- 关于Android四大组件之一Activity
- Android学习6.2下拉列表二
- Android轻松实现播放Gif图片
- Android NDK开发之 NDK 局部 全局引用
- Android Scroller简单用法
- android APK反编译
- 免费电子书《Android 研发工程师高级进阶》
- Android 之 布局属性