当前位置: 首页 > wzjs >正文

公司微网站建设指数基金怎么买

公司微网站建设,指数基金怎么买,wordpress怎么修改固定链接,长沙网络营销一、简述滑动冲突问题 在 Android 开发中,RecyclerView 和其子控件之间的滑动冲突是一个常见的问题。这种冲突通常发生在 RecyclerView 的子项本身也支持滑动操作时,例如子项是一个 ProgressBar、WebView 或其他自定义的滑动视图。当用户在子控件上滑动…

一、简述滑动冲突问题

在 Android 开发中,RecyclerView 和其子控件之间的滑动冲突是一个常见的问题。这种冲突通常发生在 RecyclerView 的子项本身也支持滑动操作时,例如子项是一个 ProgressBar、WebView 或其他自定义的滑动视图。当用户在子控件上滑动时,可能会触发 RecyclerView 的滑动,从而导致子控件滑动异常。

二、解决方案

  • requestDisallowInterceptTouchEvent 是 Android 中一个非常重要的方法,用于解决嵌套滑动(Nested Scrolling)或滑动冲突问题。它允许子视图(如 ScrollView、WebView 等)告诉父视图(如 RecyclerView、ViewPager 等)不要拦截当前的触摸事件,从而确保子视图能够正确处理这些事件。
  • 当调用 requestDisallowInterceptTouchEvent(true) 时,父视图的 onInterceptTouchEvent 方法将不会拦截当前的触摸事件。这意味着触摸事件会直接传递给子视图,而不是被父视图处理。

三、示例(RecyclerView 和 子控件 ProgressBar)

假设你有一个 RecyclerView,其中的每个子项包含一个可滑动的 ProgressBar 横向进度条。如果没有调用 requestDisallowInterceptTouchEvent(true),当用户在 ProgressBar 上滑动时,RecyclerView 可能会拦截这些事件,导致 ProgressBar 无法正常滑动。通过在 ProgressBar 的 onTouchEvent 中调用 requestDisallowInterceptTouchEvent(true),可以确保 ProgressBar 能够正常处理滑动事件。

1、子项布局文件 item_recycleview.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"android:padding="20dp"><ProgressBarandroid:id="@+id/progress_bar"android:layout_width="100dp"android:layout_height="match_parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent"style="?android:attr/progressBarStyleHorizontal"android:max="100"android:progress="50"/></androidx.constraintlayout.widget.ConstraintLayout>

2、适配器类 CustomAdapter.kt

在子控件的 onTouchEvent 方法中根据触摸事件类型来调用 requestDisallowInterceptTouchEvent 方法:

  • 在触摸事件开始时(MotionEvent.ACTION_DOWN),调用 requestDisallowInterceptTouchEvent(true),通知父控件不要拦截事件。
  • 在触摸事件结束时( MotionEvent.ACTION_UP 或 MotionEvent.ACTION_CANCEL),调用 requestDisallowInterceptTouchEvent(false),允许父控件重新拦截触摸事件。
package com.example.helloworldimport android.annotation.SuppressLint
import android.view.LayoutInflater
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.widget.ProgressBar
import androidx.recyclerview.widget.RecyclerViewclass CustomAdapter: RecyclerView.Adapter<CustomAdapter.ViewHolder>() {@SuppressLint("ClickableViewAccessibility")class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {private val progressBar: ProgressBar = itemView.findViewById(R.id.progress_bar)init {var lastX = 0fprogressBar.setOnTouchListener { view, motionEvent ->when (motionEvent.action) {MotionEvent.ACTION_DOWN -> {// 当触摸事件发生时,通知父视图不要拦截触摸事件progressBar.parent.requestDisallowInterceptTouchEvent(true)}MotionEvent.ACTION_UP -> {// 当触摸事件发生时,通知父视图可以拦截触摸事件progressBar.parent.requestDisallowInterceptTouchEvent(false)}MotionEvent.ACTION_MOVE -> {if (motionEvent.x > lastX) {progressBar.progress += 2} else {progressBar.progress -= 2}lastX = motionEvent.x}}true}}}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {val view = LayoutInflater.from(parent.context).inflate(R.layout.item_recycleview, parent, false)return ViewHolder(view)}override fun getItemCount(): Int {return 5}override fun onBindViewHolder(holder: ViewHolder, position: Int) {}
}

3、Activity 的布局文件 activity_scroll_conflict.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="http://schemas.android.com/apk/res-auto"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recycler_view"android:layout_width="300dp"android:layout_height="100dp"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"android:layout_marginTop="20dp"android:layout_marginStart="20dp"/></androidx.constraintlayout.widget.ConstraintLayout>

4、ScrollConflictActivity.kt 文件

package com.example.helloworldimport android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.helloworld.databinding.ActivityScrollConflictBindingclass ScrollConflictActivity: AppCompatActivity() {private lateinit var _binding: ActivityScrollConflictBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)_binding = ActivityScrollConflictBinding.inflate(layoutInflater)setContentView(_binding.root)_binding.recyclerView.adapter = CustomAdapter()_binding.recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)}
}

四、其他注意事项

  • 性能考虑:频繁调用 requestDisallowInterceptTouchEvent 可能会影响性能,尤其是在复杂的布局中,建议仅在必要时调用此方法。
  • 嵌套滚动支持:如果子控件支持嵌套滚动(如 NestedScrollView),可以使用 NestedScrollingParent 和 NestedScrollingChild 接口来实现更复杂的嵌套滚动逻辑。
http://www.dtcms.com/wzjs/831927.html

相关文章:

  • 云网站建设的意义冠县网站建设是什么
  • 专业做涂料网站做外贸a货网站
  • 一起做网站广州企业所得税政策最新2023
  • 免备案网站制作上海餐饮品牌策划公司
  • 网站报错404地方电商网站
  • 五金模具技术支持 东莞网站建设深圳十大网站建设公司
  • 彩票网站建设dadi163咸阳网站建设求职简历
  • 北京网站优化 卓立海创烟台建设工程信息网站
  • wordpress站群被谷歌k有什么网站可以做六级题目嘛
  • html源码网站建设中什么是电子商务专业?
  • 游戏试玩网站怎么做站长工具seo综合
  • 哪个网站专做民宿做网站图片太大好吗
  • 汉中网站建设公司推荐动漫短视频怎么制作教程
  • 做营销网站建设想开个网站卖衣服的怎么做
  • 广安市建设局官方网站安徽省建设监理协会
  • 亚马逊网站如何做商家排名视频剪辑培训机构哪个好
  • 广东圆心科技网站开发网站模板设计wordpress远程后台设置
  • 网站管理员权限有哪些东莞常平隐贤山庄门票多少钱
  • 扬州学做网站培训多少钱网站建设要经历哪些步骤?
  • 医院招聘网站建设和维护人员单页网站如何做排名
  • 网站付费推广方式机票酒店 网站建设
  • 滨州淄博网站建设wordpress7.6
  • 网站的后缀名怎么建设制作网站公司 英语网站首页
  • 做淘宝客网站挣钱建站公司售后服务
  • 做图书网站赚钱么wordpress数据库批量删评论
  • app展示网站模板seo优化步骤
  • 青龙桥网站建设将网站做成logo怎么做
  • 免费网站建设找哪家办公用品企业网站建设方案
  • 西安网站开发培训价格职业技能培训平台
  • 南平武夷山网站建设自己做网站统计