- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
该应用程序使用 android viewpager2 (androidx.viewpager2:viewpager2:1.0.0-beta04) 来显示幻灯片。每张幻灯片的上半部分都有视频,下半部分有文字。每张幻灯片都是使用相同的 fragment 类构建的(下面给出的代码)
如果一张一张地滑动,幻灯片就可以正常工作,但是如果尝试打开 'setCurrentItem', 有时 幻灯片在过渡过程中卡住了一半,如下图所示。
演示 Activity
myViewPager2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
myViewPager2.setAdapter(myAdapter);
myViewPager2.setOffscreenPageLimit(3);
myViewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
if (mLoadedFragment != null) {
mLoadedFragment.pauseMedia();
}
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
try {
rvSlideIndex.invalidate();
adapterSlideIndex.updateSelectedSlide(position);
//setTitle(mSlides.get(position).getTitle());
setScreenTitle(mSlides.get(position).getTitle());
mLoadedFragment = ((PresentationSlideFragment) myAdapter.createFragment(position));
mLoadedFragment.startVideo();
} catch (Exception e) {
}
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
if (mLoadedFragment != null && state == ViewPager2.SCROLL_STATE_SETTLING) {
mLoadedFragment.clearMediaPlayer();
}
}
});
public void onClick(final int position) {
drawerLayout.closeDrawer(GravityCompat.START);
//myAdapter.notifyDataSetChanged();
myViewPager2.postDelayed(new Runnable() {
@Override
public void run() {
myViewPager2.setCurrentItem(position); <--- **Here is problem**
}
}, 200);
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.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:fitsSystemWindows="true">
<!-- Layout to contain contents of main body of screen (drawer will slide over this) -->
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- Container for contents of drawer - use NavigationView to make configuration easier -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true">
<androidx.recyclerview.widget.RecyclerView
android:layout_marginTop="80dp"
android:id="@+id/rl_slide_index"
android:layout_width="280dp"
android:layout_height="wrap_content" />
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
import androidx.viewpager2.adapter.FragmentStateAdapter;
public class ViewPagerFragmentAdapter extends FragmentStateAdapter {
private ArrayList<Fragment> slides = new ArrayList<>();
public ViewPagerFragmentAdapter(@NonNull FragmentActivity fragmentActivity) {
super(fragmentActivity);
}
public void addFragment(Fragment fragment) {
slides.add(fragment);
}
@Override
public int getItemCount() {
return slides.size();
}
@NonNull
@Override
public Fragment createFragment(int position) {
return slides.get(position);
}
}
public class PresentationSlideFragment extends Fragment {
// Class variables and constructors
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout containing a title and body text.
ViewGroup rootView = (ViewGroup) inflater
.inflate(R.layout.fragment_slide, container, false);
String slideId = getArguments().getString("slideId", null);
if (slideId != null) {
mPresentationSlide = PresentationSlideData.getSlideById(slideId);
mTvtitle = rootView.findViewById(R.id.tv_title);
linearLayout = rootView.findViewById(R.id.linear);
videoView = rootView.findViewById(R.id.videoView);
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
ViewGroup.LayoutParams lp = videoView.getLayoutParams();
lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
videoView.setLayoutParams(lp);
}
});
videoView.postDelayed(new Runnable() {
@Override
public void run() {
videoView.setVideoURI(Uri.parse("android.resource://com.ts.appname/" + mPresentationSlide.getVideo()));
}
}, 50);
//mMediaController = new MediaController(getContext());
//videoView.setMediaController(mMediaController);
// Binded text here---
}
return rootView;
}
@Override
public void onResume() {
super.onResume();
startVideo();
}
@Override
public void onPause() {
super.onPause();
pauseMedia();
}
public MediaController getMediaController() {
return mMediaController;
}
public MediaController startVideo() {
try {
videoView.postDelayed(new Runnable() {
@Override
public void run() {
try {
videoView.start();
mMediaController.hide();
} catch (Exception e) {
e.printStackTrace();
}
}
}, 0);
} catch (Exception e) {
e.printStackTrace();
}
return mMediaController;
}
@Override
public void onDestroy() {
super.onDestroy();
clearMediaPlayer();
}
public void clearMediaPlayer() {
videoView.stopPlayback();
}
public void pauseMedia() {
if (videoView != null && videoView.isPlaying()) {
videoView.pause();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/rl_video_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<VideoView
android:foregroundGravity="center"
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="300dp"
android:layout_gravity="center" />
<FrameLayout
android:id="@+id/controllerAnchor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/videoView" />
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="20dp"
android:layout_marginTop="-10dp"
android:layout_below="@id/rl_video_container"
android:background="@drawable/rounded_top_gray_card_border"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:textColor="@color/colorPrimary"
android:fontFamily="@font/fs_joey_bold"
android:textStyle="bold"
android:textSize="22dp" />
<LinearLayout
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="vertical"></LinearLayout>
</LinearLayout>
</RelativeLayout>
W/View: requestLayout() improperly called by androidx.recyclerview.widget.RecyclerView{2ccd53e VFED..... ......ID 0,160-560,1424 #7f0a009d app:id/rl_slide_index} during layout: running second layout pass
W/View: requestLayout() improperly called by androidx.appcompat.widget.AppCompatTextView{623df9f V.ED..... ......ID 68,0-555,49 #7f0a002d app:id/action_bar_title} during layout: running second layout pass
最佳答案
在我的情况下,这是因为 animateLayoutChanges
我的 fragment 中的属性(property)。
所以如果有animateLayoutChanges="true"
删除那个
关于android - 使用 setCurrentItem 打开幻灯片时,Viewpager2 过渡卡住了一半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58152334/
我正在我的 xamarin.forms 应用程序中实现扫描仪功能,为此我正在使用 iOS native AVCaptureSession。但我的问题是在扫描或捕获 session 处于事件状态并且设备
所以我目前正在为我的项目制作一个音乐应用程序,它允许用户创建自己的音乐播放列表。但是,当我单击显示媒体选择器按钮时,它只显示白屏,当包含媒体选择器的 View 是 Initial View Contr
当我尝试在模拟器中启动 AVD 时,会出现一个小窗口(见图片),5 秒后它说没有响应并一直保持这种状态直到我关闭它。 我在网上搜索并尝试了所有解决方案,但都没有成功 在 BIOS 中启用了虚拟化 已安
尝试使用以下命令从视频中提取特定帧(删除了文件的特定名称!: ffmpeg -i video.mp4 -vf "select-gte(n\,6956)"-vframes 10262 文件夹/帧%d.j
我怎么知道终端正在继续工作而不中断它? 我已经运行了以下 git 命令: clone git://ligo-vcs.phys.uwm.edu/lalsuite.gituote 一段时间后它似乎被卡住了
我对 WPF 中的数据网格有一个奇怪的问题。我正在为我的应用程序使用 MVVM 模式,并且我的 View 模型实现了 idataerrorinfo 接口(interface)。每当我在添加新行后在我的
我有这个 Excel 文件,当我输入数据时它卡住了。例如,我双击一个单元格,输入数据,然后按“输入”。它会卡住而不是进入下面的细胞。按几次“enter”不会解冻程序,唯一有效的是用鼠标选择另一个单元格
我有线程池的任务队列,每个任务都有卡住锁定其正在使用的所有资源的倾向。并且除非重新启动服务,否则这些无法释放。 ThreadPool 中有没有办法知道它的线程已经被卡住?我有一个使用超时的想法(虽然我
我制作了以下小程序来确定内存是否用于 freeze(X,Goal) 之类的目标回收时 X变得无法访问: %:- use_module(library(freeze)). % Ciao Prolog n
我有一个使用 swing 的简单 java 应用程序。然而,当我执行程序时,框架将会出现,但我无法单击任何地方,并且按钮仅在几秒钟后出现。我对 javas Swing 库非常陌生,所以我可能会丢失一些
我正在尝试创建一个简单的 TCP 客户端服务器应用程序接口(interface)用户可以在按下相应按钮时启动或停止服务器我创建了一个 StartServer 按钮,当用户按下按钮时它应该连接到服务
我正在尝试从 ftp 服务器下载文件,但在检索文件时卡住了。我正在使用 commons-net-3.6.jar 我注意到的事情 当我使用 ftpClient.enterRemotePassiveMod
我正在尝试编写一个函数,该函数将能够找到位于我系统上的可执行文件搜索路径中的任意可执行文件。我遇到了一些输入会导致 SearchPathW 的问题无限期地卡住,我不确定到底发生了什么。 std::op
我的 Nativescript 应用程序的许多页面中都有 RadSideDrawer。主应用程序组件有一个 page-router-outlet并且所有其他页面都通过导航加载到此组件中。带抽屉的页面包
我有一个最小的服务器,它等待客户端连接,然后他启动一个线程,将回复发送回客户端,问题是回复。 这是服务器的代码: int port = 1234; ServerSocket servSock =
我有一个使用 C# 的 WinForms 应用程序。我尝试从文件中读取一些数据并将其插入到数据表中。虽然此操作很忙,但我的表单卡住并且我无法移动它。有谁知道我该如何解决这个问题? 最佳答案 这可能是因
在我们学校最新的项目中,我遇到了一些问题。我想观察新条目的路径,该路径是由文件导向器按钮选择的,但如果我选择任何文件,整个窗口都会卡住...我猜它被卡住,因为调用了“observePath”方法,但我
当我输入一百万作为输入数字时,我的程序卡住了。我该如何解决这个问题? 我尝试将第二个 for 循环分离为第二个函数,但没有成功。 import java.io.*; public class Arra
早上好编译我的应用程序时,我在 Android Studio 上遇到问题。我在构建时没有收到关于 app:transformClassesWithDexBuilderForDebug 的任何输出错误,
我正在使用以下触发器 DELIMITER ; CREATE TRIGGER updateCount AFTER INSERT ON user_info FOR EACH ROW BEGIN UPDA
我是一名优秀的程序员,十分优秀!