左右滑动切换是通过viewPager来实现的,完整代码查看附件。
创新互联专业为企业提供双辽网站建设、双辽做网站、双辽网站设计、双辽网站制作等企业网站建设、网页设计与制作、双辽企业网站模板建站服务,十载双辽做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
ViewPager的数据是通过PageAdapter来装载的:
1. 调用adapter.notifyDataSetChanged(); 刷新控件,但是要覆盖PagerAdapter的getItemPosition方法,并返回 return POSITION_NONE;
2. 利用PagerAdapter的工作机制,就是PagerAdapter的执行顺序, PagerAdapter作为ViewPager的适配器,无论ViewPager有多少页,PagerAdapter在初始化时也只初始化开始的2个View,即调用2次instantiateItem方法。而接下来每当ViewPager滑动时,PagerAdapter都会调用destroyItem方法将距离该页2个步幅以上的那个View销毁,以此保证PagerAdapter最多只管辖3个View,且当前View是3个中的中间一个,如果当前View缺少两边的View,那么就instantiateItem,如里有超过2个步幅的就destroyItem。
3. 每当Adapter调用instantiateItem时,运用View.setTag方法将该View标识。当需要更新这个View的数据时,通过调用ViewPager.findViewWithTag方法找到相应的View,然后更新View中的数据。
android的滑动效果是通过View容器类ViewFlipper来实现的。
ViewFilpper 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放。
又ViewAnimator继承至于FrameLayout的,所以ViewFilpper的Layout里面可以放置多个View,继承关系如下:
1、activity的写法如下:
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
public class ViewFlipperActivity extends Activity implements android.view.GestureDetector.OnGestureListener {
private int[] imgs = { R.drawable.img1, R.drawable.img2,
R.drawable.img3, R.drawable.img4, R.drawable.img5 };
private GestureDetector gestureDetector = null;
private ViewFlipper viewFlipper = null;
private Activity mActivity = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mActivity = this;
viewFlipper = (ViewFlipper) findViewById(R.id.viewflipper);
gestureDetector = new GestureDetector(this); // 声明检测手势事件
for (int i = 0; i imgs.length; i++) { // 添加图片源
ImageView iv = new ImageView(this);
iv.setImageResource(imgs[i]);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
viewFlipper.addView(iv, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
}
viewFlipper.setAutoStart(true); // 设置自动播放功能(点击事件,前自动播放)
viewFlipper.setFlipInterval(3000);
if(viewFlipper.isAutoStart() !viewFlipper.isFlipping()){
viewFlipper.startFlipping();
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
viewFlipper.stopFlipping(); // 点击事件后,停止自动播放
viewFlipper.setAutoStart(false);
return gestureDetector.onTouchEvent(event); // 注册手势事件
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e2.getX() - e1.getX() 120) { // 从左向右滑动(左进右出)
Animation rInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_in); // 向右滑动左侧进入的渐变效果(alpha 0.1 - 1.0)
Animation rOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_right_out); // 向右滑动右侧滑出的渐变效果(alpha 1.0 - 0.1)
viewFlipper.setInAnimation(rInAnim);
viewFlipper.setOutAnimation(rOutAnim);
viewFlipper.showPrevious();
return true;
} else if (e2.getX() - e1.getX() -120) { // 从右向左滑动(右进左出)
Animation lInAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_in); // 向左滑动左侧进入的渐变效果(alpha 0.1 - 1.0)
Animation lOutAnim = AnimationUtils.loadAnimation(mActivity, R.anim.push_left_out); // 向左滑动右侧滑出的渐变效果(alpha 1.0 - 0.1)
viewFlipper.setInAnimation(lInAnim);
viewFlipper.setOutAnimation(lOutAnim);
viewFlipper.showNext();
return true;
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
}
2、main.xml配置文件:
?xml version="1.0" encoding="utf-8"?
LinearLayout xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
ViewFlipper
android:id="@+id/viewflipper"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/
/LinearLayout
以上完成了手势滑屏:
手势滑动屏幕动画,是通过android.view.GestureDetector类检测各种手势事件实现的,该类有两个回调接口(Interface)
A、GestureDetector.OnDoubleTapListener,用来通知DoubleTap双击事件,类似于鼠标的双击事件,接口三个抽象回调函数如下
1、onDoubleTap(MotionEvent e):DoubleTap双击手势事件后通知(触发)
2、onDoubleTapEvent(MotionEvent e):DoubleTap双击手势事件之间通知(触发),包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知)
3、onSingleTapConfirmed(MotionEvent e):用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势;那么如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,此时触发的就是SingleTapConfirmed事件
布局最外包一层滚动条
ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
/LinearLayout
/ScrollView
强制横竖屏
在配置文件中对Activity节点添加android:screenOrientation属性(landscape是横向,portrait是纵向)
你是要滑动切换activity还是页面?如果是activity的话你可以给当前页面添加手势,滑动的时候实现activity的切换然后给activity添加切换动画,如果是像qq那种效果可以用tab来做,实现效果很不错,或者activitygroup,还可以用fragment来做,这些实现效果都不错。如果是页面滑动切换,可以用viewpager,这个效果很好,代码能力强就用viewgroup的滚动来实现,效果也还可以。
可以通过framelayout进行布局,在该布局中放置多个页面,默认只让第一个页面VISIBLE,其他的NONE,然后写一个触摸监听器,监听你的手势是上下还是左右,相应的显示相应的页面,隐藏其他的页面。这样应该可以实现了同一个Activity之间切换多个页面,我以前刚刚实现了类似的效果,只不过是通过点击Activity上不同的导航条块。
建立工程
1
打开android开发平台
2
建立新的工程,点击file. -new-project.选择Android Application Project,点击Next.
3
填写工程名,选择创建的android版本。图例工程名为zuoyouhuadong 版本为android2.2.填好之后点击next
4
下面进入前景色和背景色等的设置,若不属性可直接点击next
5
继续点击next
6
可以编辑Activity Name名字,避免所有的工程都一个名字,运行的时候不知道都是哪一个工程。点击finish.工程创建完毕。
END
添加图片到工程
1
网上下载或者本地选取图片四张。(图片名字最好改为英文)
2
适当缩小 工程软件窗口,点击图片aa,拖放到zuoyouhuadong-res-drawable-hapi上,会提示你是否将图片复制进工程。
3
选择是OK
4
可以看到工程中已经有你的图片了。
5
按照本段2--4步骤把其他三张图片添加进工程。 添加图片的准备工作完毕。
END
代码实现左右滑动
1
目标转向主编辑框,视图界面转到代码界面。
2
代码实现左右滑动功能。主要用HorizontalScrollView 。主要代码如下:HorizontalScrollView xmlns:android=""
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="none"
android:id="@+id/ScrollView"
LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/aa"
android:layout_weight="1"
android:scaleType="fitXY" /
ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bb"
android:scaleType="fitXY"/
ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/cc"
android:scaleType="fitXY"/
ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dd"
android:scaleType="fitXY"/
/LinearLayout
/HorizontalScrollView全
部代码截图如下。
3
部分主要代码解析:
android:scrollbars="none" 设置是否有滑动条;
android:scaleType="fitXY" 设置图片自适应;
android:src="@drawable/aa" 设置加载的图片;
android:layout_width="wrap_content"设置宽属性;
android:layout_height="wrap_content"设置长属性。
END
运行查看效果
右键工程,点击run,等待虚拟器启动运行程序
2
解锁,查看效果 。本例中图片大小未调整,稍微欠缺一点美观效果,请读者体谅。希望大家支持,并共同学习。