【问题标题】:ScrollView get back to topScrollView 返回顶部
【发布时间】:2015-07-10 18:51:34
【问题描述】:

所以我有一个只有一个视图的滚动视图(EditText),我想实现

dispatchTouchEvent(MotionEvent me)
 View current_view = Processor.findViewGroupWithPoint(
            (int) me.getRawX(), (int) me.getRawY(), rmodel.layout.parent);
    if (current_view instanceof ScrollView) {


        switch( me.getAction() ){
        case MotionEvent.ACTION_DOWN:
            Log.d(TAG, " down");

            ((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_DOWN);

            break;
        case MotionEvent.ACTION_UP:
            Log.d(TAG, " up");
((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_UP);
            break;
        }

}

我的问题是,当我向下滚动时,它可以工作,但是我必须将手指放在屏幕上,就像我移除它一样,它会回到滚动视图的顶部。

【问题讨论】:

    标签: android android-edittext scrollview touch-event motionevent


    【解决方案1】:

    据我所知,当你放手时它会到达滚动视图的顶部,因为你告诉它。你说

    case MotionEvent.ACTION_UP:
        Log.d(TAG, " up");
        ((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_UP);
    

    MotionEvent.ACTION_UP 用于检测您的手指何时被释放,因此当它这样做时,您告诉它使用

    ((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_UP);
    

    要解决此问题,您真正需要做的就是删除该行...

    编辑:

    我写了这个,它应该可以工作,可能需要一些调整。

    boolean bottom = false;
    

    这里基本上只创建一个名为 bottom 的布尔值并将其设置为 false ^^

    case MotionEvent.ACTION_DOWN:
        Log.d(TAG, " down");
    
        if (bottom = false){
            ((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_DOWN);
        }else{
            ((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_UP);
        }
        break;
    }
    

    这只是看看 ScrollView 是在底部还是现在......希望它有效!

    【讨论】:

    • true,当我实现案例 MotionEvent.ACTION_DOWN: Log.d(TAG, "down"); ((ScrollView) findViewById(111111)).fullScroll(View.FOCUS_DOWN);独自一人,它让我跌入谷底,永远不会退缩,但我也想能够站起来,当我向上移动时,是否可以同时做这两件事?
    • 您可以使用 if 语句来检测它是在底部还是现在。我会尝试添加一个示例,但看看您是否可以自己弄清楚!
    • 好答案。作为对你们俩的说明,@A.AL,您不应该在每次想要引用该项目时调用 findViewById()。我建议创建一个类级别的变量,例如private ScrollView mMyScrollView,在 onCreate 中您可以调用mMyScrollView = (ScrollView) findViewById(111111);,在其余代码中您可以像mMyScrollView.fullScroll(View.FOCUS_DOWN) 一样引用它。这不仅会使您的代码更具可读性,而且通过不多次挖掘视图层次结构来提高性能。
    • @McAdam331,谢谢,我写代码的时候只是在测试一些东西,但是谢谢我从来不知道调用 findViewById() 会影响性能,再次感谢
    猜你喜欢
    • 2021-08-20
    • 2015-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2016-04-14
    • 2012-02-15
    • 2020-06-15
    相关资源
    最近更新 更多