android ViewFilpper(二)
来源:互联网 发布:网络的碳足迹是什么 编辑:程序博客网 时间:2024/05/17 14:24
这章是写关于N个View之间进行滑动
如果还是个上篇那样是不可以的,那么我们就需要动态的在java代码中添加View
1、首先来自定义一个ViewFilpper类,名为MyViewFlipper
MyViewFlipper.java
package com.viewflipper;import com.viewflipper.MyGestureListener.OnFlingListener;import android.content.Context;import android.util.AttributeSet;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.widget.ViewFlipper;public class MyViewFlipper extends ViewFlipper implements OnFlingListener{private GestureDetector mGestureDetector = null; private OnViewFlipperListener mOnViewFlipperListener = null; Context context; public MyViewFlipper(Context context) { super(context); this.context = context; } public MyViewFlipper(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } public void setOnViewFlipperListener(OnViewFlipperListener mOnViewFlipperListener) { this.mOnViewFlipperListener = mOnViewFlipperListener; MyGestureListener myGestureListener = new MyGestureListener(); myGestureListener.setOnFlingListener(this); mGestureDetector = new GestureDetector(context, myGestureListener); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (null != mGestureDetector) { return mGestureDetector.onTouchEvent(ev); } else { return super.onInterceptTouchEvent(ev); } } @Override public void flingToNext() { if (null != mOnViewFlipperListener) { int childCnt = getChildCount(); if (childCnt == 2) { removeViewAt(1); } addView(mOnViewFlipperListener.getNextView(), 0); if (0 != childCnt) { setInAnimation(getContext(), R.anim.left_in); setOutAnimation(getContext(), R.anim.left_out); setDisplayedChild(0); } } } @Override public void flingToPrevious() { if (null != mOnViewFlipperListener) { int childCnt = getChildCount(); if (childCnt == 2) { removeViewAt(1); } addView(mOnViewFlipperListener.getPreviousView(), 0); if (0 != childCnt) { setInAnimation(getContext(), R.anim.right_in); setOutAnimation(getContext(), R.anim.right_out); setDisplayedChild(0); } } } public interface OnViewFlipperListener { View getNextView(); View getPreviousView(); } }
2、定义一个MyGestureListener类继承SimpleOnGestureListener
package com.viewflipper;import android.view.GestureDetector.SimpleOnGestureListener;import android.view.MotionEvent;public class MyGestureListener extends SimpleOnGestureListener {private OnFlingListener mOnFlingListener; public OnFlingListener getOnFlingListener() { return mOnFlingListener; } public void setOnFlingListener(OnFlingListener mOnFlingListener) { this.mOnFlingListener = mOnFlingListener; } @Override public final boolean onFling(final MotionEvent e1, final MotionEvent e2, final float speedX, final float speedY) { if (mOnFlingListener == null) { return super.onFling(e1, e2, speedX, speedY); } float XFrom = e1.getX(); float XTo = e2.getX(); float YFrom = e1.getY(); float YTo = e2.getY(); // 左右滑动的X轴幅度大于100,并且X轴方向的速度大于100 if (Math.abs(XFrom - XTo) > 100.0f && Math.abs(speedX) > 100.0f) { // X轴幅度大于Y轴的幅度 if (Math.abs(XFrom - XTo) >= Math.abs(YFrom - YTo)) { if (XFrom > XTo) { // 下一个 mOnFlingListener.flingToNext(); } else { // 上一个 mOnFlingListener.flingToPrevious(); } } } else { return false; } return true; } public interface OnFlingListener { void flingToNext(); void flingToPrevious(); }}
3、编写主界面 main.xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <com.viewflipper.MyViewFlipper android:id="@+id/myViewFlipper" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/white" android:gravity="center"> </com.viewflipper.MyViewFlipper></LinearLayout>
4、flipper_view.xml
<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView" android:textSize="100dip" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </ScrollView>
5、编写左右滑动的xml
left_in.xml和left_out.xml在上一篇文章给出了,这里就不重复
right_in.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="500" /><alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" /></set>
right_out.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="500" /><alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" /></set>
6、Activity类
package com.viewflipper;import com.viewflipper.MyViewFlipper.OnViewFlipperListener;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.ScrollView;import android.widget.TextView;public class ViewFlipperActivity extends Activity implements OnViewFlipperListener{private MyViewFlipper myViewFlipper; private int currentNumber; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); currentNumber = 1; myViewFlipper = (MyViewFlipper) findViewById(R.id.myViewFlipper); myViewFlipper.setOnViewFlipperListener(this); myViewFlipper.addView(creatView(currentNumber)); }@Overridepublic View getNextView() {currentNumber = currentNumber == 10 ? 1 : currentNumber + 1; return creatView(currentNumber); }@Override public View getPreviousView() {currentNumber = currentNumber == 1 ? 10 : currentNumber - 1; return creatView(currentNumber); }private View creatView(int currentNumber) { LayoutInflater layoutInflater = LayoutInflater.from(this); ScrollView resultView = (ScrollView) layoutInflater.inflate(R.layout.flipper_view, null); ((TextView) resultView.findViewById(R.id.textView)).setText(currentNumber + ""); return resultView; } }
好了,效果自己运行出来就可以看到了
- android ViewFilpper(二)
- android ViewFilpper(一)
- Android ViewPager ViewFilpper ViewFlow
- Android 第一次接触ViewFilpper
- ViewFilpper
- ViewFilpper
- Android开发学习之ViewFilpper
- Android学习 - 小知识(sqlite与ViewPager和ViewFilpper简介)
- android中三种方式实现水平滑动ViewPager,ViewFilpper,ViewFlow
- android中三种方式实现水平滑动ViewPager,ViewFilpper,ViewFlow
- android学习,当viewFilpper需要滑出并且GONE
- ViewFilpper ViewSwitcher
- android 三种实现水平向滑动方式(ViewPager、ViewFilpper、ViewFlow)的比较
- android 三种实现水平向滑动方式(ViewPager、ViewFilpper、ViewFlow)的比较
- android 三种实现水平向滑动方式(ViewPager、ViewFilpper、ViewFlow)的比较
- android 三种实现水平向滑动方式(ViewPager、ViewFilpper、ViewFlow)的比较
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较(转)
- ViewFilpper实现TextView广告上滚的效果(一)--入门
- 变量的I的赋值
- 使用apache的commons-net-3.1.jar实现FTP上传
- 《算法艺术与信息学竞赛》题目-提交方式对照表
- Android ViewPager多页面滑动切换以及动画效果
- java访问资源文件
- android ViewFilpper(二)
- 常用代码
- js 漂亮的无缝单行滚动文字
- 蝴蝶兰与鳞托菊
- java日期处理bean
- 从“看”到“玩 智能电视开打“双核”战
- ecshop模板教程——类似淘宝滚屏漂浮返回
- java获取ip地址
- 含记录最小元素的堆栈