我正在开发一个应用程序,在我有视图寻呼机显示不同的视频图像时,有n个寻呼机屏幕,
所有页面都是自动幻灯片,如下所示。
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
ViewGroup v=(ViewGroup)inflater.inflate(R.layout.fragment_home, container, false);
ButterKnife.bind(this, v);
/*Snackbar.make(v, "Home Fragment", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();*/
//Toast.makeText(getActivity(),"home Fragment",Toast.LENGTH_LONG).show();
viewPager.setAdapter(new MyPagerAdapter());
t=new Thread(){
@Override
public void run()
{
try {
while(true) {
count %= size;
Log.w("slide", "" + count);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(count);
}
});
count++;
Thread.currentThread().sleep(5000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
//t.start();
return v;
}
当我触摸此特定寻呼机时,我想停止自动幻灯片寻呼机,当我从寻呼机上移开手指然后启动寻呼机的自动滑动并再次停止触摸时,如何实现此功能?
答案 0 :(得分:2)
我使用 https://github.com/Trinea/android-auto-scroll-view-pager
来实现我的功能我使用了以下自定义viewpager
<cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
并设置自动幻灯片特定时间的间隔
setInterval(long)
然后使用: startAutoScroll()自动幻灯片的方法
和: topAutoScroll()用于触摸停止动画,如下所示,
layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
Log.w("touched","down");
stopScroll();
return true;
//break;
case MotionEvent.ACTION_UP:
Log.w("touched","up");
startScroll();
return true;
//break;
}
return false;
}
});
并使用以下gradle:
compile ('cn.trinea.android.view.autoscrollviewpager:android-auto-scroll-view-pager:1.1.2')
{
exclude module: 'support-v4'
}
答案 1 :(得分:-1)
您可以识别viewpager的触摸事件,并根据您可以停止和启动滑块。如下所示,您将获得触摸事件,然后您可以保持您的线程工作。
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// put your code here to stop and start slide, means put your thread code here..
return false;
}
});