Android切换页面效果的实现一:WebView+ViewFlipper
2013-07-30 23:08
751 查看
前言:
这两周在帮学校做一个新生入学用的“新里程”的项目,要做到页面切换阅读的效果,自己百度了下,找到普遍是使用WebView+ViewFlipper的实现方法,但这种方法不能满足我的要求,因为它很难实现定位的效果,就是定位到固定某一页,不过还是贴出来,学习下。
代码实现:
布局很简单,只用一个ViewFlipper,main.xml
自定义的WebView,MyWebView.java
主体Activity,MainActivity.java:
这个实现有两个缺点:1.不能实现定位;2.会循环切换页面;
我没有解决这两个问题,而是采用另一个控件来解决了,如果哪位博友能够解决,分享下解决方法!
这两周在帮学校做一个新生入学用的“新里程”的项目,要做到页面切换阅读的效果,自己百度了下,找到普遍是使用WebView+ViewFlipper的实现方法,但这种方法不能满足我的要求,因为它很难实现定位的效果,就是定位到固定某一页,不过还是贴出来,学习下。
代码实现:
布局很简单,只用一个ViewFlipper,main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ViewFlipper android:id="@+id/ViewFlipper" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ViewFlipper> </RelativeLayout>
自定义的WebView,MyWebView.java
package cn.edu.stu.webview_viewflipper; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.animation.AnimationUtils; import android.webkit.WebView; import android.widget.ViewFlipper; public class MyWebView extends WebView { float downXValue; long downTime; private ViewFlipper flipper; private float lastTouchX, lastTouchY; private boolean hasMoved = false; public MyWebView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyWebView(Context context, ViewFlipper flipper) { super(context); this.flipper = flipper; } public MyWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } @Override public boolean onTouchEvent(MotionEvent evt) { // TODO Auto-generated method stub boolean consumed = super.onTouchEvent(evt); if (isClickable()) { switch (evt.getAction()) { case MotionEvent.ACTION_DOWN: lastTouchX = evt.getX(); lastTouchY = evt.getY(); downXValue = evt.getX(); downTime = evt.getEventTime(); hasMoved = false; break; case MotionEvent.ACTION_MOVE: hasMoved = moved(evt); break; case MotionEvent.ACTION_UP: float currentX = evt.getX(); long currentTime = evt.getEventTime(); float difference = Math.abs(downXValue - currentX); long time = currentTime - downTime; Log.i("Touch Event========", "Distance: " + difference + "px Time: " + time + "ms"); if ((downXValue < currentX) && (difference > 100 && (time < 220))) { /** 跳到上一页 */ this.flipper.setInAnimation(AnimationUtils.loadAnimation(this.getContext(), R.anim.push_right_in)); this.flipper .setOutAnimation(AnimationUtils.loadAnimation(this.getContext(), R.anim.push_right_out)); flipper.showPrevious(); } /** X轴滑动间隔大于100,并且时候小于220ms,并且向X轴左标的目标滑动 */ if ((downXValue > currentX) && (difference > 100) && (time < 220)) { /** 跳到下一页 */ this.flipper.setInAnimation(AnimationUtils.loadAnimation(this.getContext(), R.anim.push_left_in)); this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this.getContext(), R.anim.push_left_out)); flipper.showNext(); } break; } } return consumed || isClickable(); } private boolean moved(MotionEvent evt) { return hasMoved || Math.abs(evt.getX() - lastTouchX) > 10.0 || Math.abs(evt.getY() - lastTouchY) > 10.0; } }
主体Activity,MainActivity.java:
package cn.edu.stu.webview_viewflipper; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ViewFlipper; public class MainActivity extends Activity { MyWebView myWebView; private ViewFlipper flipper; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // super.loadUrl("file:///android_asset/stu_for_u.html"); // MyWebView wv=(MyWebView)findViewById(R.id.wv); // wv.loadUrl("file:///android_asset/stu_for_u.html"); // wv.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper); flipper.addView(addWebView("file:///android_asset/experience/exp_article2.html")); flipper.addView(addWebView("file:///android_asset/experience/exp_article6.html")); flipper.addView(addWebView("file:///android_asset/experience/exp_article10.html")); } private View addWebView(String url) { myWebView = new MyWebView(this, flipper); // 设置WebView属性,能够执行Javascript脚本 myWebView.getSettings().setJavaScriptEnabled(true); // 加载需要显示的网页 // webview.loadUrl("file:///android_asset/index.html"); myWebView.loadUrl(url); // 使WebView的网页跳转在WebView中进行,而非跳到浏览器 myWebView.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } }); return myWebView; } }
这个实现有两个缺点:1.不能实现定位;2.会循环切换页面;
我没有解决这两个问题,而是采用另一个控件来解决了,如果哪位博友能够解决,分享下解决方法!
相关文章推荐
- Android切换页面效果的实现二:WebView+ViewPager
- Android切换页面效果的实现二:WebView+ViewPager
- Android切换页面效果的实现二:WebView+ViewPager
- ViewFlipper实现ViewPager的页面切换效果
- Android入门(34)——第十一章 使用ViewFlipper实现屏幕切换动画效果
- Android实战简易教程-第二十六枪(基于ViewPager实现微信页面切换效果)
- Android利用ViewFlipper实现屏幕切换动画效果
- Android基于ViewPager实现类似微信页面切换效果
- Android学习-使用ViewFlipper实现屏幕切换的动画效果
- Android应用中利用ViewPager实现多页面滑动切换效果示例
- Android利用ViewFlipper实现屏幕切换动画效果
- Android实战简易教程-第二十六枪(基于ViewPager实现微信页面切换效果)
- Android ViewFlipper实现多个布局手势切换的效果
- Android利用ViewFlipper实现屏幕切换动画效果
- Android利用ViewFlipper实现屏幕切换动画效果
- Android利用ViewFlipper实现屏幕切换动画效果
- Android利用ViewFlipper实现屏幕切换动画效果
- Android编程实现ViewPager多页面滑动切换及动画效果的方法
- Android之ViewFlipper实现手动+自动切换图片(附加动画效果)
- Android实战简易教程<二十六>(基于ViewPager实现微信页面切换效果)