使用addView添加的视图不翻转(使用ViewFlipper,Android)

发布于 2024-11-13 12:16:22 字数 2820 浏览 2 评论 0原文

问题是添加到 main.xml 的所有视图都正确翻转 - 在最后一个视图进入第一个视图之后,第一个视图进入最后一个视图之后,它是四舍五入的,但是如果我使用 ViewFlipper 类的 addView 方法添加视图,它不会翻转“圆形”它会停止在其上并执行一些不正确的动画,它不会进入下一个视图,并且仅当仅完成 1 次翻转到最后时才会进入上一个视图。 请说明如何使其成为一轮 1->2->3->1。 下面是 Flipper 实现的代码:

public class Activity1 extends Activity implements OnTouchListener{

float downXValue;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Set main.XML as the layout for this Activity


    // Add these two lines
    LinearLayout layMain = (LinearLayout) findViewById(R.id.layout_main);
    layMain.setOnTouchListener((OnTouchListener) this); 


}

public boolean onTouch(View arg0, MotionEvent arg1) {

    // Get the action that was done on this touch event
    switch (arg1.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        {
            // store the X value when the user's finger was pressed down
            downXValue = arg1.getX();
            break;
        }

        case MotionEvent.ACTION_UP:
        {
            // Get the X value when the user released his/her finger
            float currentX = arg1.getX();            
           View view = new View(this);
         //HERE IS DECLARATION OF VIEW WHICH I NEED TO ADD
           GraphicsView myview=new GraphicsView(this);
            // going backwards: pushing stuff to the right
            if (downXValue < currentX)
            {
                // Get a reference to the ViewFlipper
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
                        vf.addView(myview);                 

                 // Set the animation

                vf.setInAnimation(view.getContext(), R.anim.push_right_in);
                 vf.setOutAnimation(view.getContext(), R.anim.push_right_out);
                 // Flip!

                 vf.showNext();

            }

            // going forwards: pushing stuff to the left
            if (downXValue > currentX)
            {
                // Get a reference to the ViewFlipper
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
              //HERE I'M ADDING IT                   
             vf.addView(myview);
                 // Set the animation
                vf.setInAnimation(view.getContext(), R.anim.push_left_in);
                vf.setOutAnimation(view.getContext(), R.anim.push_left_out);
                  // Flip!
                                   vf.showPrevious();
            }
            break;
        }
    }

    // if you return false, these actions will not be recorded
    return true;
}

请帮忙。如果可能的话,请回答请在 main.xml 中添加我在代码中定义的对象,例如 myview 是 GraphicsView 的类对象,它从 View 扩展。

问候, 基姆

The problem is that all the views, added to main.xml are flipping correctly - after the last view goes first view, after first -goes last, its rounded, but if i add the view using method addView of ViewFlipper class it won't flip "rounded" it will stop on it and do some incorrect animation, it won't go to next view and will go to previous only if there was done only 1 flip to the end.
Please, say how to make it works as a round 1->2->3->1.
Here's the code of flipper realization:

public class Activity1 extends Activity implements OnTouchListener{

float downXValue;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // Set main.XML as the layout for this Activity


    // Add these two lines
    LinearLayout layMain = (LinearLayout) findViewById(R.id.layout_main);
    layMain.setOnTouchListener((OnTouchListener) this); 


}

public boolean onTouch(View arg0, MotionEvent arg1) {

    // Get the action that was done on this touch event
    switch (arg1.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        {
            // store the X value when the user's finger was pressed down
            downXValue = arg1.getX();
            break;
        }

        case MotionEvent.ACTION_UP:
        {
            // Get the X value when the user released his/her finger
            float currentX = arg1.getX();            
           View view = new View(this);
         //HERE IS DECLARATION OF VIEW WHICH I NEED TO ADD
           GraphicsView myview=new GraphicsView(this);
            // going backwards: pushing stuff to the right
            if (downXValue < currentX)
            {
                // Get a reference to the ViewFlipper
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
                        vf.addView(myview);                 

                 // Set the animation

                vf.setInAnimation(view.getContext(), R.anim.push_right_in);
                 vf.setOutAnimation(view.getContext(), R.anim.push_right_out);
                 // Flip!

                 vf.showNext();

            }

            // going forwards: pushing stuff to the left
            if (downXValue > currentX)
            {
                // Get a reference to the ViewFlipper
                ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
              //HERE I'M ADDING IT                   
             vf.addView(myview);
                 // Set the animation
                vf.setInAnimation(view.getContext(), R.anim.push_left_in);
                vf.setOutAnimation(view.getContext(), R.anim.push_left_out);
                  // Flip!
                                   vf.showPrevious();
            }
            break;
        }
    }

    // if you return false, these actions will not be recorded
    return true;
}

Please, help. And answer plz if possible to add in main.xml the objects, that i defined in the code like myview is class object of GraphicsView, which extends from View.

Regards,
Keem

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不交电费瞎发啥光 2024-11-20 12:16:22

根据您发布的代码,在您的代码中,您在触摸事件上动态添加视图,因此您触摸设备屏幕的次数、您的 OnTouch() 调用和每次触摸都会调用此..

GraphicsView myview=new GraphicsView(this );
还有这个.. ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
vf.addView(myview);
因此,每次触摸时,您都会添加一个视图,这可能就是您无法正确翻转的原因。

对于您的解决方案,您应该遵循正确的流程 - 可能如下

  1. 在 OnCreate() 中在 viewFlipper 中添加不同的视图,在 OnTouch() 之外。
  2. 在 OnTouch() 中,您设置动画并调用 vf.showPrevious() 或 vf.showNext() 进行正确的导航。

As per your code that you post, In your code you are adding view dynamically, on Touch Events, so as many time you touch your device screen, your OnTouch() call and every touch call this..

GraphicsView myview=new GraphicsView(this);
and also this.. ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
vf.addView(myview);
so on every touch you adding a view, and may be thats why you not getting right flipping.

For your solution, you should follow correct flow - may be as follows

  1. in OnCreate() add different view in viewFlipper, out side your OnTouch().
  2. In OnTouch() you set your animation and call vf.showPrevious() orvf.showNext() for propper navigation.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文