【问题标题】:WebView Animation issue on AndroidAndroid 上的 WebView 动画问题
【发布时间】:2011-03-28 07:59:07
【问题描述】:

我正在使用 html、css 和 javascript 开发一个 Android 应用程序。 我的应用程序依赖于 Phonegap 框架。 该应用程序由相当数量的本地页面组成。在里面 我正在尝试处理 Android 上的滑动手势事件的应用程序 移动并根据滑动方向移动页面。即如果 用户向左滑动应用程序必须调用上一页, 然后如果用户向右滑动,则应用程序将转发 用户转到下一页。

我可以使用 Android 的原生 java 来做到这一点。但问题是, 在调用页面期间,我正在为 请求的页面。但会发生什么是当前页面采用幻灯片 效果不是请求的页面,就是幻灯片之后的效果 完成,出现请求的页面:( 我正在寻找一种机制来使效果影响 请求的本地页面不是当前页面。我试着推迟 动画持续时间,但它变得太慢了,所以变得无聊 顺便说一句,没有做到这一点。

我希望你能帮助我解决这个问题,或者向我提出任何建议 实现该效果的方法或机制。

这是我的代码:

public class App extends DroidGap {
    /** Called when the activity is first created. */

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        gestureDetector = new GestureDetector(new MyGestureDetector());

        gestureListener = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (gestureDetector.onTouchEvent(event)) {
                    return true;
                }
                return false;
            }
        };
      super.loadUrl("file:///android_asset/www/index.html");

    }

    class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {

                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {


                appView.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_left));
                appView.goBack();
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                     appView.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_right_in));
                  appView.goForward();
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent e){
        super.dispatchTouchEvent(e);
        return gestureDetector.onTouchEvent(e);
    }
}

【问题讨论】:

  • 请添加一些代码来解释您到目前为止所做的事情..
  • 我已经更新了帖子,并包含了用于处理滑动事件的源代码以及我为前进和前进所做的工作
  • 永远不要按原样转储代码。删除不需要/注释的部分并保持整洁。
  • @Tushar Vengurlekar 很抱歉这个错误,请发现它现在更整洁和可读:) 希望你能帮助我解决这个问题
  • 你如何使用 Viewlipper 滑动页面?

标签: android webview slider cordova swipe


【解决方案1】:

您在 goBack() 和 goForward() 事件之前添加动画导致不匹配。我建议您创建一个自定义 webview 并覆盖这两种方法。如下图所示。

    public class mywebView extends WebView{

    public mywebView(Context context) {
        super(context);
    }

    @Override
    public void goBack(){

    }

    @Override
    public void goForward(){            
    }       
}

不要错过关键字@Override。现在在这些被覆盖的方法中,您可以添加动画代码。希望这会有所帮助。

【讨论】:

  • 我尝试在调用 goBack() 或 goForward() 后调用动画,但同样的事情发生在当前页面的效果不是后退或前进的。
  • 是的,它不会那样工作。尝试我上面建议的替代方案。
  • 感谢您的努力,实际上,goBack 和 goForward 方法位于通过 phonegap 提供的类包含的初始化对象中,因此我无法覆盖它:(
【解决方案2】:

这是 android 库函数。所以请使用 android.R.anim.fade_out 而不是 R.anim.fade_out

' 动画 anim = AnimationUtils.loadAnimation(getContext(),android.R.anim.fade_out) MainActivity.webview.startAnimation(anim);'

希望对你有帮助.....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多