Viewflipper in android not flipping all the time
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.
精彩评论