android – 将滚动事件传递到另一个视图

android – 将滚动事件传递到另一个视图,第1张

概述我一直在使用 android设计支持库来折叠工具栏布局. 一切都正常,除了我想滚动整个视图滚动内容在collapsingBarlayout 这是xml布局: <?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android. 我一直在使用 android设计支持库来折叠工具栏布局.
一切都正常,除了我想滚动整个视图滚动内容在collapsingbarlayout

这是xml布局:

<?xml version="1.0" enCoding="utf-8"?><androID.support.v4.Widget.DrawerLayout    xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:app="http://schemas.androID.com/apk/res-auto"    androID:ID="@+ID/drawer_layout"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:fitsSy@R_404_6563@windows="true">    <androID.support.design.Widget.CoordinatorLayout        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:fitsSy@R_404_6563@windows="true">        <androID.support.design.Widget.AppbarLayout            androID:ID="@+ID/appbar"            androID:layout_wIDth="match_parent"            androID:layout_height="420dp"            androID:theme="@style/themeOverlay.AppCompat.Dark.Actionbar"            androID:fitsSy@R_404_6563@windows="true">            <androID.support.design.Widget.CollapsingToolbarLayout                androID:ID="@+ID/collapsing_toolbar"                androID:layout_wIDth="match_parent"                androID:layout_height="match_parent"                app:layout_scrollFlags="scroll|exitUntilCollapsed"                app:contentScrim="?attr/colorPrimary"                app:expandedTitlemarginStart="48dp"                app:expandedTitlemarginEnd="64dp"                androID:fitsSy@R_404_6563@windows="true">                <androID.support.v4.vIEw.VIEwPager                    xmlns:androID="http://schemas.androID.com/apk/res/androID"                    androID:ID="@+ID/pager"                    androID:layout_wIDth="match_parent"                    androID:layout_height="match_parent"                    androID:scaleType="centerCrop"                    app:layout_collapseMode="parallax"                    app:layout_collapseParallaxMultiplIEr="0.8"                    androID:fitsSy@R_404_6563@windows="true"                    app:layout_behavior="@string/appbar_scrolling_vIEw_behavior"                    />                <androID.support.v7.Widget.Toolbar                    androID:ID="@+ID/toolbar"                    androID:layout_wIDth="match_parent"                    androID:layout_height="?attr/actionbarSize"                    app:popuptheme="@style/themeOverlay.AppCompat.light"                    app:layout_collapseMode="pin" />            </androID.support.design.Widget.CollapsingToolbarLayout>        </androID.support.design.Widget.AppbarLayout>        <androID.support.v4.Widget.nestedScrollVIEw            androID:ID="@+ID/scroll_vIEw"            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:clipTopadding="false"            app:layout_behavior="@string/appbar_scrolling_vIEw_behavior">            <include layout="@layout/activity_item_detail"                />        </androID.support.v4.Widget.nestedScrollVIEw>        <androID.support.design.Widget.floatingActionbutton            androID:ID="@+ID/fab_button"            androID:layout_wIDth="wrap_content"            androID:layout_height="wrap_content"            androID:layout_margin="@dimen/activity_vertical_margin"            androID:clickable="true"            androID:src="@androID:drawable/ic_menu_call"            app:layout_anchor="@+ID/appbar"            app:layout_anchorGravity="bottom|right|end"                        />    </androID.support.design.Widget.CoordinatorLayout>    <androID.support.design.Widget.NavigationVIEw        androID:ID="@+ID/navigation_vIEw"        androID:layout_wIDth="wrap_content"        androID:layout_height="match_parent"        androID:layout_gravity="start"        app:headerLayout="@layout/drawer_header"        app:menu="@menu/drawer"/></androID.support.v4.Widget.DrawerLayout>


如果触摸任何除了vIEwpager /工具栏之外的任何内容,滚动内容.
我也需要在浏览页面上垂直触摸和滚动滚动体验.
已经尝试覆盖VIEwTager的ontouchEvent,将ACTION_UP运动事件传递给scroll_vIEw.

nestedScrollVIEw.post(new Runnable() {    @OverrIDe    public voID run() {        mPager.setontouchListener(new VIEw.OntouchListener() {            @OverrIDe            public boolean ontouch(VIEw v,MotionEvent event) {                if (event.getAction() == MotionEvent.ACTION_UP) {                    return nestedScrollVIEw.ontouchEvent(event);                } else {                    return v.ontouchEvent(event);                }            }        });    }});

但它不行.请帮助解决方法/任何可以快速解决这个问题的黑客.

解决方法 查看正在接收触摸事件的视图.在这种具体情况下,VIEwPager正在接收我们要覆盖的触摸事件.一旦您看到接收触摸事件的视图,您可以安装手势检测器.看看这个 guide,特别是在

Detecting a Subset of Supported Gestures

以这种方式,您可以管理在外部视图上执行的所有手势,您可以以某种方式对手势做出反应.
注意:当您扩展GestureDetector.SimpleOnGestureListener时,请注意覆盖onDown方法,否则将不会得到任何其他事件.

编辑

我已经在这个github project测试了我的建议.如果您以这种方式修改了CheeseDetailActivity,那么当您在奶酪图像中滚动时,您将获得调用的onScroll事件.

public class CheeseDetailActivity extends AppCompatActivity {    public static final String EXTRA_name = "cheese_name";    private GestureDetectorCompat mDetector;    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_detail);        MyGestureListener Listener = new MyGestureListener();        mDetector = new GestureDetectorCompat(this,new MyGestureListener());        VIEw root = findVIEwByID(R.ID.pager);        root.setontouchListener(new VIEw.OntouchListener() {            @OverrIDe            public boolean ontouch(VIEw v,MotionEvent event) {                return mDetector.ontouchEvent(event);            }        });        Intent intent = getIntent();        final String cheesename = intent.getStringExtra(EXTRA_name);        final Toolbar toolbar = (Toolbar) findVIEwByID(R.ID.toolbar);        setSupportActionbar(toolbar);        getSupportActionbar().setdisplayHomeAsUpEnabled(true);        CollapsingToolbarLayout collapsingToolbar =                (CollapsingToolbarLayout) findVIEwByID(R.ID.collapsing_toolbar);        collapsingToolbar.setTitle(cheesename);        loadBackdrop();    }    private voID loadBackdrop() {        final ImageVIEw imageVIEw = (ImageVIEw) findVIEwByID(R.ID.backdrop);        GlIDe.with(this).load(Cheeses.getRandomCheeseDrawable()).centerCrop().into(imageVIEw);    }    @OverrIDe    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.sample_actions,menu);        return true;    }    class MyGestureListener extends GestureDetector.SimpleOnGestureListener {        private static final String DEBUG_TAG = "Gestures";        @OverrIDe        public boolean onDown(MotionEvent event) {            Log.d(DEBUG_TAG,"onDown: " + event.toString());            return true;        }        @OverrIDe        public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) {            Log.d(DEBUG_TAG,"onScroll: ");            //Implement functionality you want e.g. horiontal scroll changes vIEwpager item,vertical scroll collpases the toolbar            return true;        }    }}
总结

以上是内存溢出为你收集整理的android – 将滚动事件传递到另一个视图全部内容,希望文章能够帮你解决android – 将滚动事件传递到另一个视图所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1131675.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存