开发者

Viewflipper in android not flipping all the time

开发者 https://www.devze.com 2023-04-04 11:38 出处:网络
I have two views (ads) and when one ad network has no ad to show the view is supposed to flip to admob as a backup.The first view is inmobi (not sure if that has any relevance).If I force the inmobi a

I have two views (ads) and when one ad network has no ad to show the view is supposed to flip to admob as a backup. The first view is inmobi (not sure if that has any relevance). If I force the inmobi ad to fail by turning test ads on the view will flip and show the admob ad but when live ads are turned on, th开发者_JAVA百科e view never flips even when the failed ad callback is received. Please help.

@Override
public void adRequestFailed(InMobiAdView arg0) {
    // TODO Auto-generated method stub
    Log.v("","inmobi ad request failed");

    // Initiate a generic request to load it with an ad
    loadAdmob();
    ViewFlipper vf = (ViewFlipper) findViewById(R.id.ads);

    vf.showNext();
}

private void loadAdmob() {

    AdView adView = new AdView(this, AdSize.BANNER, "xxxxxxxxxxx");

    LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);
    // Add the adView to it
    layout.addView(adView);
    adView.loadAd(new AdRequest());

}

And the XML

<ViewFlipper android:id="@+id/ads"
    android:layout_width="320dip"
    android:layout_height="50dip">

    <LinearLayout
           android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <com.inmobi.androidsdk.impl.InMobiAdView
    android:layout_width="fill_parent" android:layout_height="fill_parent"
    android:id = "@+id/adview"
     />
     </LinearLayout>


     <LinearLayout
    android:orientation="vertical"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:layout_gravity="center"
    android:id="@+id/mainLayout" ></LinearLayout>

    </ViewFlipper>


I have no see the question yet. But if you need to flip just between Layouts I can provide my own code how to use the flip functionality. First you should create a separate pages of your future Layouts, like page_1.xml in res.layout folder.

 <LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@color/GreenColor"
  >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center"
        android:text="1"
        android:textSize="120dip">
    </TextView>
</LinearLayout>

After you have done, describe a main.xml file including external xml-pages:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ViewFlipper android:id="@+id/ViewFlipper01" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    >
    <include android:id="@+id/libraryView1"  layout="@layout/page_1" />
    <include android:id="@+id/libraryView2"  layout="@layout/page_2" />
    <include android:id="@+id/libraryView3"  layout="@layout/page_3" />
</ViewFlipper>
</RelativeLayout>

Than don't forget in class file to declare vf=(ViewFlipper)findViewById(R.id.ViewFlipper01); Next step you should to override OnTouchEvent to calculate new coordinates and showing the flip-animation:

   @Override
    public boolean onTouchEvent(MotionEvent touchevent) {
        switch (touchevent.getAction())
        {
            case MotionEvent.ACTION_DOWN:
            {
                oldTouchValueX = touchevent.getX();
                oldTouchValueY = touchevent.getY();
                break;
            }
            case MotionEvent.ACTION_UP:
            {
                //if(this.searchOk==false) return false;
                float currentX = touchevent.getX();
                float currentY = touchevent.getY();

                float deltaX = getAbs(oldTouchValueX - currentX);
                float deltaY = getAbs(oldTouchValueY - currentY);

                if (deltaX >= deltaY)
                {
                    if (oldTouchValueX < currentX)
                    {
                        vf.setInAnimation(inFromLeftAnimation());
                        vf.setOutAnimation(outToRightAnimation());
                        vf.showNext();
                    }
                    if (oldTouchValueX > currentX)
                    {
                        vf.setInAnimation(inFromRightAnimation());
                        vf.setOutAnimation(outToLeftAnimation());
                        vf.showPrevious();
                    } 
                } //if deltaX
                else
                    {
                    if (oldTouchValueY < currentY)
                    {
                        vf.setInAnimation(inFromUpAnimation());
                        vf.setOutAnimation(outToDownAnimation());
                        vf.showNext();

                    }
                    if (oldTouchValueY > currentY)
                    {
                        vf.setInAnimation(inFromDownAnimation());
                        vf.setOutAnimation(outToUpAnimation());
                        vf.showPrevious();
                    }
                } //Else
            break;
            }
        }
        return false;
    }

And the last one - describe an animation methods which mentioned in OnTouchEvent:

public static Animation inFromRightAnimation() 
{
    Animation inFromRight = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT,  +1.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
    );
    inFromRight.setDuration(350);
    inFromRight.setInterpolator(new AccelerateInterpolator());
    return inFromRight;
}

public static Animation outToLeftAnimation() 
{
    Animation outtoLeft = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  -1.0f,
    Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
    );
    outtoLeft.setDuration(350);
    outtoLeft.setInterpolator(new AccelerateInterpolator());
    return outtoLeft;
}

Write similar for the rest in/out flip directions.

0

精彩评论

暂无评论...
验证码 换一张
取 消