Представление, которое было добавлено с помощью addView, не переворачивается (с помощью ViewFlipper, Android) - PullRequest
0 голосов
/ 02 июня 2011

Проблема в том, что все представления, добавленные в main.xml, корректно переворачиваются - после того, как последнее представление переходит в первое представление, после того, как первое - становится последним, оно округляется, но если я добавляю представление с использованием метода addView класса ViewFlipper, не будет переворачиваться «округлено», он остановится на нем и выполнит некорректную анимацию, он не перейдет к следующему представлению и перейдет к предыдущему, только если был сделан только один переворот до конца. Скажите, пожалуйста, как сделать так, чтобы это работало как раунд 1-> 2-> 3-> 1. Вот код реализации флиппера:

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;
}

Пожалуйста, помогите. И ответьте plz, если возможно, чтобы добавить в main.xml объекты, которые я определил в коде, как myview, это объект класса GraphicsView, который расширяется из View.

С уважением, Keem

1 Ответ

0 голосов
/ 03 июня 2011

В соответствии с вашим кодом, который вы публикуете, в своем коде вы добавляете представление динамически, на событиях Touch, так что сколько раз вы касаетесь экрана своего устройства, ваш вызов OnTouch () и каждое касание вызывают это ..

GraphicsView myview = new GraphicsView (это); а также это .. ViewFlipper vf = (ViewFlipper) findViewById (R.id.details); vf.addView (MyView);
поэтому при каждом прикосновении вы добавляете представление, и, возможно, именно поэтому вы не переключаетесь правильно.

Для вашего решения вы должны следовать правильному потоку - может быть следующим

  1. в OnCreate () добавить другое представление в viewFlipper, вне вашего OnTouch ().
  2. В OnTouch () вы устанавливаете анимацию и вызываете vf.showPrevious () orvf.showNext () для ускоренной навигации.
...