- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个 Fragment,其中有一个包含两个 ScrollView 的 ViewFlipper。我想检测 ViewFlipper 上的滑动并更改 ScrollView。我试过这样做:
public class HomeFragment extends Fragment implements OnGestureListener
{
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_TRESHOLD_VELOCITY = 200;
private View thisFragment;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private GestureDetector detecture;
private ViewFlipper riddleFlipper;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
thisFragment = LayoutInflater.from(getActivity()).inflate(R.layout.home_fragment, null);
//views
riddleFlipper = (ViewFlipper) thisFragment.findViewById(R.id.home_fragment_riddle_flipper_ViewFlipper);
slideLeftIn = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_out);
//sliding
detecture = new GestureDetector(getActivity(), this);
riddleFlipper.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent event)
{
return detecture.onTouchEvent(event);
}
});
return thisFragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public boolean onDown(MotionEvent e)
{
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if(Math.abs(e1.getY() - e2.getY()) > 250)
return false;
if((e1.getX() - e2.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_TRESHOLD_VELOCITY)
{
riddleFlipper.setInAnimation(slideLeftIn);
riddleFlipper.setOutAnimation(slideLeftOut);
riddleFlipper.showNext();
}
else if((e2.getX() - e1.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_TRESHOLD_VELOCITY)
{
riddleFlipper.setInAnimation(slideRightIn);
riddleFlipper.setOutAnimation(slideRightOut);
riddleFlipper.showNext();
}
return false;
}
@Override
public void onLongPress(MotionEvent e)
{
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY)
{
return false;
}
@Override
public void onShowPress(MotionEvent e)
{
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return false;
}
}
似乎 riddleFlipper 没有“感觉到”任何触摸事件。
编辑
我把代码改成了这样:
public class HomeFragment extends Fragment implements OnGestureListener
{
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_TRESHOLD_VELOCITY = 200;
private View thisFragment;
private ImageView userImage;
private ViewFlipper riddleFlipper;
private RelativeLayout usersRiddleLinearLayout;
private RelativeLayout favoriteLinearLayout;
private Animation slideLeftIn;
private Animation slideLeftOut;
private Animation slideRightIn;
private Animation slideRightOut;
private GestureDetector detecture;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
thisFragment = LayoutInflater.from(getActivity()).inflate(R.layout.home_fragment, null);
//views
riddleFlipper = (ViewFlipper) thisFragment.findViewById(R.id.home_fragment_riddle_flipper_ViewFlipper);
userImage = (ImageView) thisFragment.findViewById(R.id.home_fragment_user_image_ImageView);
usersRiddleLinearLayout = (RelativeLayout) thisFragment.findViewById(R.id.home_fragment_users_riddles_LinearLayout);
favoriteLinearLayout = (RelativeLayout) thisFragment.findViewById(R.id.home_fragment_favorite_riddles_LinearLayout);
slideLeftIn = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_left_in);
slideLeftOut = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_left_out);
slideRightIn = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_in);
slideRightOut = AnimationUtils.loadAnimation(getActivity(), R.anim.slide_right_out);
//sliding
detecture = new GestureDetector(getActivity(), this);
usersRiddleLinearLayout.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent event)
{
return detecture.onTouchEvent(event);
}
});
favoriteLinearLayout.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View view, MotionEvent event)
{
return detecture.onTouchEvent(event);
}
});
return thisFragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public boolean onDown(MotionEvent e)
{
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
{
if(Math.abs(e1.getY() - e2.getY()) > 250)
return false;
if((e1.getX() - e2.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_TRESHOLD_VELOCITY)
{
Toast.makeText(getActivity(), "a", Toast.LENGTH_SHORT).show();
riddleFlipper.setInAnimation(slideLeftIn);
riddleFlipper.setOutAnimation(slideLeftOut);
riddleFlipper.showNext();
}
else if((e2.getX() - e1.getX()) > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_TRESHOLD_VELOCITY)
{
Toast.makeText(getActivity(), "b", Toast.LENGTH_SHORT).show();
riddleFlipper.setInAnimation(slideRightIn);
riddleFlipper.setOutAnimation(slideRightOut);
riddleFlipper.showNext();
}
return false;
}
@Override
public void onLongPress(MotionEvent e)
{
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY)
{
return false;
}
@Override
public void onShowPress(MotionEvent e)
{
}
@Override
public boolean onSingleTapUp(MotionEvent e)
{
return false;
}
}
现在触摸事件被重新记录,但它永远不会到达 onFling
。为什么???
谢谢
最佳答案
如果您尝试覆盖 activity 的 onTouchEvent(MotionEvent event)
并从那里调用 detecture.onTouchEvent(event)
会怎样?使用OnTouchListener
?
关于java - fragment 内部的 ViewFlipper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18287379/
我的 Activity 中有一个 ViewFlipper,用作 ListView 的页脚 View 。不久前,我发布了关于我在模拟器中看到的一个问题。参见 Activity has leaked In
当我将 ViewFlipper 用作 Widget 时,我在 ViewFlipper 中更新 subview 时遇到问题。 这是小部件的布局: 这是 AppWidget
您好,我正在创建如下所示的 ViewFlipper。 并处理像这样的事件 ViewFlipperSampleActivity.java public class ViewFlipperSamp
抱歉我的英语不好。我有一个画廊,当您单击特定图像时,它会出现在屏幕上。当图片占满整个屏幕时,我想做什么,它仍然可以滚动。为此,我使用 ViewFlipper。主要 Activity publi
我已经制作了一个不错的 ViewPager,现在,我希望只要用户在屏幕上双击,底部菜单栏就会出现/消失。我以为这会很容易,但是在阅读了很多论坛并尝试了许多可能的解决方案之后,我不得不承认我无法实现它。
我正在尝试开发一个应用程序,其中包含一个带 View 翻转器的画廊。 图库显示所有图像。我想要做的是, View 翻转器中显示的图像应该在图库中突出显示。 目前我可以在 onClick 上突出显示它。
我有一些基本的动画,当它们用于 Activity 之间的转换时,它们就像一个魅力。 问题是,当我在我的取景器上使用它们时,我看到了非常明显的延迟。这是我的 Activity 中的代码 fragment
我正在尝试像这样进行缩放:zoom the imageview on the double click in viewflipper in android 我尝试将该代码改编为我的项目,但它不起作用.
对不起我的英语。当图片填满屏幕时,我想做的就是可以用来滚动。为此,请使用 ViewFlipper。但它不起作用。是全屏显示图像的类。我做错了什么? public class FullScree
我正在尝试将 viewflipper 集成到已经有抽屉导航的 Activity 中,但 viewflipper 不工作,尽管抽屉导航正在工作。主题是滑动布局并显示数据。下面是我的代码XML:
在我的 Android 应用程序的一个 Activity 中,我有一个 ViewFlipper,里面有 3 个 ImageView,构建如下:
嘿,我查了很多教程和指南,但不知何故找不到... 我需要在我的 Android 应用中包含多张图片。它就像一个图像查看器/幻灯片。目前,我使用 ImageView 和适配器在/drawable-mdp
我想创建一个菜单,它以随机时间间隔在 viewflipper 的 5 个子级之间以随机顺序“翻转”。 我尝试了以下代码,我可以让 System.out.println 显示我的调试消息以随机时间间隔记
我正在使用 ViewFlipper,我的 viewFlipper 工作正常,直到我增加了图片的高度。 它给我 OutOfMemoryError。 这是我的包含 viewFlipper 的 Activi
我在 ViewFlipper 中有一些 ImageView。我想尊重图片的纵横比,这样布局就不会占用所有屏幕。我设置了一个简单的“幻灯片”动画,但 ViewFlipper 总是比里面的图像大一点。这会
我正在开发一个 Android 项目,我在其中使用 ViewFlipper 来翻转 child 。为此,我使用了定制的脚蹼。在此我覆盖了 onTouchEvent() 方法。鳍状肢包含每个 child
我的 xml 布局中有一个包含图像的 ViewFlipper。我想全屏显示这张图片。无论我为图像使用哪种 ScaleType,我都无法让图像全屏显示。 这是我的布局:
对于包含一些图像的取景器,我应该使用什么插值器来查看连续的图像,我的意思是看到图像的结尾向左,图像的开头来自右边? (对不起我的描述,我希望你明白我的意思)。我为 viewflipper 使用动画(向
在我的 Android 项目中,我使用 ViewFlipper 来翻转 child 。为此,我使用了定制的脚蹼。在这里,我重写了 onTouchEvent()。鳍状肢也包含每个 child 的图像。但
我正在使用带有两个 ListView 的 ViewFlipper。在 ViewFlipper 上设置背景可绘制时,“翻转”时执行的动画只渲染前景,背景是黑色的!动画完成后,背景出现。动画 View 的
我是一名优秀的程序员,十分优秀!