Java 使用滑动手势查看导航
基于jsonJava 使用滑动手势查看导航,java,android,textview,swipe,viewflipper,Java,Android,Textview,Swipe,Viewflipper,基于jsonArrayListsize,我正在创建TextView 通过使用类显示,使每个文本视图的高度和宽度覆盖整个屏幕 座右铭 屏幕上只能看到1TextView。通过刷卡 应移至下一个视图,该视图将再次占据整个屏幕 向下滑动和向上滑动将移动屏幕,即视图。。。向左滑动和向右滑动应该执行一些其他任务,例如更改活动 通过使用GestureDetector.SimpleOnGestureListener启用滑动 到目前为止,我已尝试使用ViewFlipper,TextView数组在TextView之
ArrayList
size,我正在创建TextView
通过使用类显示
,使每个文本视图
的高度和宽度覆盖整个屏幕
座右铭
屏幕上只能看到1TextView
。通过刷卡
应移至下一个视图,该视图将再次占据整个屏幕
向下滑动和向上滑动将移动屏幕,即视图。。。向左滑动和向右滑动应该执行一些其他任务,例如更改活动 通过使用
GestureDetector.SimpleOnGestureListener启用滑动
到目前为止,我已尝试使用ViewFlipper
,TextView
数组在TextView
之间切换,但失败:(
代码段:
for(int i=0;i<name.size();i++)
{
text = new TextView(MainActivity.this);
text.setText(name.get(i));
text.setId(i);
text.setTextColor(Color.parseColor("#000000"));
text.setLayoutParams(new LinearLayout.LayoutParams(realWidth, realHeight));
text.setGravity(Gravity.CENTER);
text.setTextSize(40);
text.setClickable(true);
vf.addView(text);
/*
//I've tried the following code while using TextView array
myTextViews[i] = text;
myTextViews[i].setId(i);
myTextViews[i].setTextColor(Color.BLACK);
myTextViews[i].setText(name.get(i));
myTextViews[i].setGravity(Gravity.CENTER);
myTextViews[i].setTextSize(40);
myTextViews[i].setLayoutParams(new LinearLayout.LayoutParams(realWidth, realHeight));
myTextViews[i].onWindowFocusChanged(false);
LL.addView(myTextViews[i]);
*/
View lines = new View(getApplicationContext());
lines.setBackgroundColor(Color.parseColor("#000000"));
lines.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1));
vf.addView(lines);
final int finalI = i;
text.setOnTouchListener(new MainActivity()
{
@Override
public void onSwipeLeft()
{
if (vf.getDisplayedChild() == 0)
Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show();
else
vf.showNext();
}
@Override
public void onSwipeRight()
{
if (vf.getDisplayedChild() == 0)
Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show();
else
vf.showPrevious();
}
});
}
for(int i=0;i用于滑动视图(仅通过滑动手势;如果您需要在时间内滑动,则ViewFlipper是更好的方法)。使您的ViewPager
layout\u width
/layout\u height
属性都匹配父项
(在xml布局中定义ViewPager
,而不是通过代码)。还可以使您的文本视图
布局宽度
/布局高度
也与父级
匹配,这样您就根本不需要显示
类
编辑。根据最新版本,TS需要在整个应用程序中处理手势导航。我建议如下:
尽量不要使用任何自行处理手势(单击)的小部件(按钮、复选框等)。仅使用不可理解的视图,并在活动
中实现onTouchEvent
方法,该方法将接收这种情况下的所有触摸事件。在该方法中,您可以添加任何需要的手势处理
您可以创建自己的视图组
实现,并在那里覆盖onInterceptTouchEvent
/onTouchEvent
方法,并在那里手动执行任何手势处理
在这两种情况下,您都需要自己创建所有手势检测逻辑
这些链接可能会有所帮助
检测常见手势
从来没有这样做过,但第一个链接似乎是最有用的。它说,您可以首先创建某种手势描述,然后手势API可以检查执行的任何手势是否与该描述匹配。基于这个问题,我可以建议使用
哪一个是你的座右铭的替代方案,而不是你问题的解决方案
活动\u main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
MyPagerAdapter
public class MyPagerAdapter extends PagerAdapter {
Activity activity;
int txtarray[];
public MyPagerAdapter(Activity act, int[] imgArra) {
txtarray = imgArra;
activity = act;
}
public int getCount() {
return txtarray.length;
}
public Object instantiateItem(View collection, int position) {
TextView view = new TextView(activity);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
view.setText(txtarray[position]);
((ViewPager) collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
}
是否有任何错误或视图不可见?编辑问题,添加errors@Prabs请检查viewpager相关向下投票者的答案。如果可以,请给出解决方案。如果我制作TextView
layout\u width/layout\u height
match\u parent
则只有一个TextView
可见。我没有得到多个viEWS刚刚检查了文档。我想这是一个大过程。你确定它会满足要求吗?我应该试试吗..我想是的..使用viewpager.setCurrentItem(int-index);
我可以访问所需的视图..rt???@Prabs不,您不能以这种方式访问视图。setCurrentItem显示您需要的项目。项目的设置由适配器完成。ViewPager的优点是它以最佳方式实现了滑动手势。缺点是它不能通过计时器自动滑动,也不能充当旋转木马(这实际上可以通过变通方法实现)。编辑了问题,请您在@LingViston检查一次,但我已完成手势。我可以使用手势检测器跟踪执行的滑动。SimpleOnGestureListener
。我想在跟踪上下滑动时转到下一个视图,即在@覆盖公共空白onSwipeRight(){//应该在这里显示什么以转到下一个视图}
。我被卡住了。非常感谢你提供的代码。我明天会测试它,然后回复你。再次感谢你的时间。我已经实现了ViewPager,并将其从水平滚动改为垂直滚动。但是我们可以在向左和向右滑动上执行其他操作吗。我们可以覆盖这些方法吗?我没有发现类似的情况@Prabs您可以将监听器添加到viewpager,以便在页面更改时获得回调(如从左向右或从右向左滑动后,它将在“onPageSelected”上提供常见回调)。有关更多详细信息,您可以检查,对于垂直滚动,向下滑动和向上滑动将移动屏幕,即视图…向左滑动和向右滑动应会更改活动
public class MyPagerAdapter extends PagerAdapter {
Activity activity;
int txtarray[];
public MyPagerAdapter(Activity act, int[] imgArra) {
txtarray = imgArra;
activity = act;
}
public int getCount() {
return txtarray.length;
}
public Object instantiateItem(View collection, int position) {
TextView view = new TextView(activity);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
view.setText(txtarray[position]);
((ViewPager) collection).addView(view, 0);
return view;
}
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
@Override
public Parcelable saveState() {
return null;
}
}