package com.example.demo; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.MotionEvent; import android.view.View; 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; public class FrameLayoutView extends FrameLayout { private int mCurrentIndex = 0; private Context context; private float startX; private boolean loop; private int mDisplayWidth; private Animation mLeftRightInAnimation; private Animation mLeftRightOutAnimation; private Animation mRightLeftInAnimation; private Animation mRightLeftOutAnimation; private long duration = 500; private ViewFlipper mViewFlipper; // 导航索引的容器 private LinearLayout mTipLinearLayout; private View[] views; private int onID; private int offID; public FrameLayoutView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public FrameLayoutView(Context context, AttributeSet attrs) { super(context, attrs); } public FrameLayoutView(Context context) { super(context); } // 初始化控件 public void initView(View[] views, int onID, int offID) { this.context = getContext(); this.views = views; this.onID = onID; this.offID = offID; // mDisplayWidth = getResources().getDisplayMetrics().widthPixels; mViewFlipper = new ViewFlipper(context); mTipLinearLayout = new LinearLayout(context); // //将图片界面加入mViewFlipper布局中 for (int i = 0; i < views.length; i++) { mViewFlipper.addView(views[i]); } // 最外层 LinearLayout layout = new LinearLayout(context); ImageView imageLeft = new ImageView(context); imageLeft.setImageResource(R.drawable.page_img_left); layout.addView(imageLeft); // 将下面的那些点点动态加入到LinearLayout布局中 for (int j = 0; j < views.length; j++) { ImageView imageView = new ImageView(context); if (j == 0) { imageView.setImageResource(onID); } else { imageView.setImageResource(offID); } mTipLinearLayout.addView(imageView); } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( -2, -2); layoutParams.weight = 1; layout.addView(mTipLinearLayout, layoutParams); mTipLinearLayout.setGravity(Gravity.CENTER); ImageView imageRight = new ImageView(context); imageRight.setImageResource(R.drawable.page_img_right); layout.addView(imageRight); addView(mViewFlipper); // 设置下面的那些点点按底部和水平居中 LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, -2); params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL; addView(layout, params); layout.setGravity(Gravity.CENTER); layout.setPadding(10, 0, 10, 10); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { // TODO Auto-generated method stub super.onLayout(changed, left, top, right, bottom); if (mDisplayWidth == 0) { mDisplayWidth = getWidth(); // 初始化动画 mLeftRightInAnimation = new TranslateAnimation(-mDisplayWidth, 0, 0, 0); mLeftRightInAnimation.setDuration(duration); mLeftRightOutAnimation = new TranslateAnimation(0, mDisplayWidth, 0, 0); mLeftRightOutAnimation.setDuration(duration); mRightLeftInAnimation = new TranslateAnimation(mDisplayWidth, 0, 0, 0); mRightLeftInAnimation.setDuration(duration); mRightLeftOutAnimation = new TranslateAnimation(0, -mDisplayWidth, 0, 0); mRightLeftOutAnimation.setDuration(duration); } } public boolean isLoop() { return loop; } public void setLoop(boolean loop) { this.loop = loop; } public long getDuration() { return duration; } public void setDuration(long duration) { this.duration = duration; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startX = event.getX(); break; case MotionEvent.ACTION_UP: // 通过对触摸屏幕时的X坐标的改变来判断导航的方向 int tmpIndex = mCurrentIndex; if (event.getX() > startX) {// 后退 mCurrentIndex--; if (loop) { mViewFlipper.setInAnimation(mLeftRightInAnimation); mViewFlipper.setOutAnimation(mLeftRightOutAnimation); mViewFlipper.showPrevious(); if (mCurrentIndex < 0) { mCurrentIndex = views.length - 1; } } else { if (mCurrentIndex < 0) { mCurrentIndex = 0; // 到了开头,上次索引为1 if (tmpIndex == mCurrentIndex) tmpIndex = 1; } else { mViewFlipper.setInAnimation(mLeftRightInAnimation); mViewFlipper.setOutAnimation(mLeftRightOutAnimation); mViewFlipper.showPrevious(); } } } else if (event.getX() < startX) {// 前进 mCurrentIndex++; if (loop) { mViewFlipper.setInAnimation(mRightLeftInAnimation); mViewFlipper.setOutAnimation(mRightLeftOutAnimation); mViewFlipper.showNext(); if (mCurrentIndex > views.length - 1) { mCurrentIndex = 0; } } else { if (mCurrentIndex > views.length - 1) { mCurrentIndex = views.length - 1; // 到了末尾,上次索引为总长度-2 if (tmpIndex == mCurrentIndex) tmpIndex = views.length - 2; } else { mViewFlipper.setInAnimation(mRightLeftInAnimation); mViewFlipper.setOutAnimation(mRightLeftOutAnimation); mViewFlipper.showNext(); } } } ImageView lastImageView = (ImageView) mTipLinearLayout .getChildAt(tmpIndex); ImageView imageView = (ImageView) mTipLinearLayout .getChildAt(mCurrentIndex); imageView.setImageResource(onID); lastImageView.setImageResource(offID); break; default: break; } return true; } }
收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2295
- 用户1336
- 访客10465445
每日一句
Wisdom begins in wonder.
智慧始于好奇。
智慧始于好奇。
新会员