0

我试图用Neil Davies的CoverFlow Widget v2作为片段活动。 林希望这样的事情enter image description hereCoverFlow as FragmentActivity

相反即时得到这个enter image description here

显然,什么是错的我在执行,但由于林看到没有错误或crashes..Im有点失去了为去哪里找。 Anywho下面是Java和XML代码

SampleTabsDefault.java

public class SampleTabsDefault extends FragmentActivity { 


private static final String[] CONTENT = new String[] { "Tab 1", "Tab 2", "Tab 3", "Tab 4", "Tab 5", "Tab 6", 
    "Tab 7","Tab 8","Tab 9","Tab 10","Tab 11","Tab 12","Tab 13","Tab 14" 
    ,"Tab 15","Tab 16"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.simple_tabs_2); 

    FragmentPagerAdapter adapter = new MyNavTabs(getSupportFragmentManager()); 

    ViewPager pager = (ViewPager)findViewById(R.id.pager); 
    pager.setAdapter(adapter); 

    TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator); 
    indicator.setViewPager(pager); 


} 



class MyNavTabs extends FragmentPagerAdapter {///////maybe this needs to be in fragment to to call CoverFlowExampleFragment 
    public MyNavTabs(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch(position) 
     { 
       case 0: 
        TestFragment fragment = new TestFragment(); 
        return fragment; 

       case 1: 
        TestFragment2 fragment2 = new TestFragment2(); 
        return fragment2; 

      } 

        TestFragment3 fragment3 = new TestFragment3(); 
        return fragment3; 


    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return CONTENT[position % CONTENT.length].toUpperCase(); 
    } 

    @Override 
    public int getCount() { 
     return CONTENT.length; 
    } 
}public void onBackPressed() { 

    finish(); 
    super.onBackPressed(); 
} 

}

simple_tabs_2.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<com.viewpagerindicator.TabPageIndicator 
    android:id="@+id/indicator" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    /> 
<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="1" 
    android:background="@drawable/bkg_gradient"/> 

</LinearLayout> 

TestFragment2.java

public final class TestFragment2 extends Fragment { 


TextView et; 
TextView text; 

SharedPreferences sp; 
View myView; 
CheckBox cb; 
int counter_score; 
int counter_score_this; 
int counter_score_b; 
int counter_score_c; 
int counter_score_d; 
int counter_score_e; 
int GotSaved_ABC, GotSaved_EYE; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    counter_score=0; 
    counter_score_this =0; 
    counter_score_b =0; 
    counter_score_c =0; 
    counter_score_d =0; 
    counter_score_e =0; 


} 




@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View myView = inflater.inflate(R.layout.fragment_2, container, false); 
    text = (TextView)myView.findViewById(R.id.textView1); 
    et = (TextView)myView.findViewById(R.id.textView3); 
    cb = (CheckBox) myView.findViewById(R.id.checkBox1); 
    /// FragmentPagerAdapter adapter = new ScrollGallery(getChildFragmentManager()); 

    /// ViewPager pager = (ViewPager)myView.findViewById(R.id.pager); 
    // pager.setAdapter(adapter); 

    //TabPageIndicator indicator = (TabPageIndicator)myView.findViewById(R.id.indicator); 
    //indicator.setViewPager(pager); 
    CoverFlow mycoverFlow = new CoverFlow(getActivity()); 

    mycoverFlow.setAdapter(new ImageAdapter(getActivity())); 

    ImageAdapter coverImageAdapter = new ImageAdapter(getActivity()); 

    //coverImageAdapter.createReflectedImages(); 

    mycoverFlow.setAdapter(coverImageAdapter); 

    mycoverFlow.setSpacing(-25); 
    mycoverFlow.setSelection(4, true); 
    mycoverFlow.setAnimationDuration(1000); 

    loadPrefs(); 
    return myView; 

} 

private void loadPrefs() { 
    int questions_int =156; 
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    GotSaved_ABC = sp.getInt("NAME", GotSaved_ABC); 
    GotSaved_EYE = sp.getInt("NAME2", GotSaved_EYE); 
    counter_score = GotSaved_ABC; 
    counter_score_this =GotSaved_EYE; 
    //////counter_score_2 = make it equal to whatever.. 
    int percentage = (int)(GotSaved_ABC + GotSaved_EYE * 100.0/questions_int + 0.5); 
    text.setText(percentage +"%"); 



//} 
///class ScrollGallery extends FragmentPagerAdapter {///////this maybe needs to be in fragment to to call CoverFlowExampleFragment 
    // public ScrollGallery(FragmentManager fm) { 
     // super(fm); 
    /// } 

    //@Override 
    // public Fragment getItem(int position) { 

     // return CoverFlowExampleFragment.getActivity(); 
    } 
public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 

    private FileInputStream fis; 

    private Integer[] mImageIds = { 
     R.drawable.kasabian_kasabian, 
      R.drawable.starssailor_silence_is_easy, 
      R.drawable.killers_day_and_age, 
      R.drawable.garbage_bleed_like_me, 
      R.drawable.death_cub_for_cutie_the_photo_album, 
      R.drawable.kasabian_kasabian, 
      R.drawable.massive_attack_collected, 
      R.drawable.muse_the_resistance, 
      R.drawable.starssailor_silence_is_easy 
    }; 

    private ImageView[] mImages; 

    public ImageAdapter(Context c) { 
    mContext = c; 
    mImages = new ImageView[mImageIds.length]; 
    } 
public boolean createReflectedImages() { 
     //The gap we want between the reflection and the original image 
     final int reflectionGap = 4; 


     int index = 0; 
     for (int imageId : mImageIds) { 
     Bitmap originalImage = BitmapFactory.decodeResource(getResources(), 
     imageId); 
      int width = originalImage.getWidth(); 
      int height = originalImage.getHeight(); 


      //This will not scale but will flip on the Y axis 
      Matrix matrix = new Matrix(); 
      matrix.preScale(1, -1); 

      //Create a Bitmap with the flip matrix applied to it. 
      //We only want the bottom half of the image 
      Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height/2, width, height/2, matrix, false); 


      //Create a new bitmap with same width but taller to fit reflection 
      Bitmap bitmapWithReflection = Bitmap.createBitmap(width 
      , (height + height/2), Config.ARGB_8888); 

     //Create a new Canvas with the bitmap that's big enough for 
     //the image plus gap plus reflection 
     Canvas canvas = new Canvas(bitmapWithReflection); 
     //Draw in the original image 
     canvas.drawBitmap(originalImage, 0, 0, null); 
     //Draw in the gap 
     Paint deafaultPaint = new Paint(); 
     canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint); 
     //Draw in the reflection 
     canvas.drawBitmap(reflectionImage,0, height + reflectionGap, null); 

     //Create a shader that is a linear gradient that covers the reflection 
     Paint paint = new Paint(); 
     LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, 
      bitmapWithReflection.getHeight() + reflectionGap, 0x70ffffff, 0x00ffffff, 
      TileMode.CLAMP); 
     //Set the paint to use this shader (linear gradient) 
     paint.setShader(shader); 
     //Set the Transfer mode to be porter duff and destination in 
     paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); 
     //Draw a rectangle using the paint with our linear gradient 
     canvas.drawRect(0, height, width, 
      bitmapWithReflection.getHeight() + reflectionGap, paint); 

     ImageView imageView = new ImageView(mContext); 
     imageView.setImageBitmap(bitmapWithReflection); 
     imageView.setLayoutParams(new CoverFlow.LayoutParams(120, 180)); 
     imageView.setScaleType(ScaleType.MATRIX); 
     mImages[index++] = imageView; 

     } 
     return true; 
} 

    public int getCount() { 
     return mImageIds.length; 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

    //Use this code if you want to load from resources 
     ImageView i = new ImageView(mContext); 
     i.setImageResource(mImageIds[position]); 
     i.setLayoutParams(new CoverFlow.LayoutParams(130, 130)); 
     i.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

     //Make sure we set anti-aliasing otherwise we get jaggies 
     BitmapDrawable drawable = (BitmapDrawable) i.getDrawable(); 
     drawable.setAntiAlias(true); 
     return i; 

    //return mImages[position]; 
    } 
    /** Returns the size (0.0f to 1.0f) of the views 
    * depending on the 'offset' to the center. */ 
    public float getScale(boolean focused, int offset) { 
     /* Formula: 1/(2^offset) */ 
     return Math.max(0, 1.0f/(float)Math.pow(2, Math.abs(offset))); 
    } 

    } 

    //@Override 
    ///public int getCount() { 
     // TODO Auto-generated method stub 
     //return 0; 
    //} 

     } 

fragment_2.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:weightSum="3" android:orientation="horizontal" android:layout_gravity="center_horizontal" > 
<CheckBox 
    android:id="@+id/checkBox1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Check this box" /> 
<TextView 
    android:id="@+id/textView1" 
    android:layout_width="200dp" 
    android:layout_height="180dp" 
    android:layout_marginLeft="-55dp" 
    android:layout_marginTop="112dp" 
    android:background="@drawable/blue_main_score" 
    android:gravity="center_horizontal|center_vertical" 
    android:text="0" 
    android:shadowColor="@android:color/black" 
    android:shadowRadius="7.0" 
    android:shadowDx="1.0" 
    android:shadowDy="1.0" 
    android:textColor="#f5f5f5f5" 
    android:textSize="50dp" 
    android:textStyle="bold" 
    android:visibility="visible" /> 


<TextView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="left" 

    android:text="Fragment TEST" 
    android:textSize="48sp" 
    android:id="@+id/textView3"/> 

</LinearLayout> 

</LinearLayout> 

*编辑忘了CoverFlow.java

public class CoverFlow extends Gallery { 

    /** 
    * Graphics Camera used for transforming the matrix of ImageViews 
    */ 
private Camera mCamera = new Camera(); 

/** 
* The maximum angle the Child ImageView will be rotated by 
*/  
private int mMaxRotationAngle = 90; 

/** 
* The maximum zoom on the centre Child 
*/ 
private int mMaxZoom = -500; 

/** 
* The Centre of the Coverflow 
*/ 
private int mCoveflowCenter; 

    public CoverFlow(Context context) { 
    super(context); 
    this.setStaticTransformationsEnabled(true); 
    } 

    public CoverFlow(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    this.setStaticTransformationsEnabled(true); 
    } 

    public CoverFlow(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    this.setStaticTransformationsEnabled(true); 
    } 

    /** 
    * Get the max rotational angle of the image 
    * @return the mMaxRotationAngle 
    */ 
    public int getMaxRotationAngle() { 
    return mMaxRotationAngle; 
    } 

    /** 
    //* Set the max rotational angle of each image 
    * @param maxRotationAngle the mMaxRotationAngle to set 
    */ 
    public void setMaxRotationAngle(int maxRotationAngle) { 
    mMaxRotationAngle = maxRotationAngle; 
    } 

    /** 
    * Get the Max zoom of the centre image 
    * @return the mMaxZoom 
    */ 
    public int getMaxZoom() { 
    return mMaxZoom; 
    } 

    /** 
    * Set the max zoom of the centre image 
    * @param maxZoom the mMaxZoom to set 
    */ 
    public void setMaxZoom(int maxZoom) { 
    mMaxZoom = maxZoom; 
    } 

    /** 
    * Get the Centre of the Coverflow 
    * @return The centre of this Coverflow. 
    */ 
    private int getCenterOfCoverflow() { 
    return (getWidth() - getPaddingLeft() - getPaddingRight())/2 + getPaddingLeft(); 
    } 

    /** 
    * Get the Centre of the View 
    * @return The centre of the given view. 
    */ 
    private static int getCenterOfView(View view) { 
    return view.getLeft() + view.getWidth()/2; 
    } 
    /** 
    * {@inheritDoc} 
    * 
    * @see #setStaticTransformationsEnabled(boolean) 
    */ 
    protected boolean getChildStaticTransformation(View child, Transformation t) { 

    final int childCenter = getCenterOfView(child); 
    final int childWidth = child.getWidth() ; 
    int rotationAngle = 0; 

    t.clear(); 
    t.setTransformationType(Transformation.TYPE_MATRIX); 

    if (childCenter == mCoveflowCenter) { 
     transformImageBitmap((ImageView) child, t, 0); 
    } else {  
     rotationAngle = (int) (((float) (mCoveflowCenter - childCenter)/ childWidth) *  mMaxRotationAngle); 
     if (Math.abs(rotationAngle) > mMaxRotationAngle) { 
     rotationAngle = (rotationAngle < 0) ? -mMaxRotationAngle : mMaxRotationAngle; 
     } 
     transformImageBitmap((ImageView) child, t, rotationAngle);   
    }  

    return true; 
    } 

     /** 
     * This is called during layout when the size of this view has changed. If 
     * you were just added to the view hierarchy, you're called with the old 
     * values of 0. 
     * 
     * @param w Current width of this view. 
     * @param h Current height of this view. 
     * @param oldw Old width of this view. 
     * @param oldh Old height of this view. 
     */ 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    mCoveflowCenter = getCenterOfCoverflow(); 
    super.onSizeChanged(w, h, oldw, oldh); 
    } 

    /** 
    * Transform the Image Bitmap by the Angle passed 
    * 
    * @param imageView ImageView the ImageView whose bitmap we want to rotate 
    * @param t transformation 
    * @param rotationAngle the Angle by which to rotate the Bitmap 
    */ 
    private void transformImageBitmap(ImageView child, Transformation t, int rotationAngle) {    
    mCamera.save(); 
    final Matrix imageMatrix = t.getMatrix();; 
    final int imageHeight = child.getLayoutParams().height;; 
    final int imageWidth = child.getLayoutParams().width; 
    final int rotation = Math.abs(rotationAngle); 

    mCamera.translate(0.0f, 0.0f, 100.0f); 

    //As the angle of the view gets less, zoom in  
    if (rotation < mMaxRotationAngle) { 
    float zoomAmount = (float) (mMaxZoom + (rotation * 1.5)); 
    mCamera.translate(0.0f, 0.0f, zoomAmount);   
    } 

    mCamera.rotateY(rotationAngle); 
    mCamera.getMatrix(imageMatrix);    
    imageMatrix.preTranslate(-(imageWidth/2), -(imageHeight/2)); 
    imageMatrix.postTranslate((imageWidth/2), (imageHeight/2)); 
    mCamera.restore(); 
    } 
    } 

回答

2

大量的代码:-)

在你TestFragment2.java ,似乎有一个大错误(可以解释你为什么看不到你的CoverFlow)和另一个较小的。

在您的的onCreateView方法中,您忘记将mycoverFlow添加到视图层次结构中。 添加到您的onCreateView方法,看看这个修复它(部分):

((ViewGroup)myView).addView(mycoverFlow, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

(也许MATCH_PARENT应该WRAP_CONTENT)。

一个较小的错误是,在这个onCreateView方法中,你可以调用mycoverFlow.setAdapter(...)两次。只有最后一个有效。删除第一个。

+0

大量的代码和大量的笑的失败...... 那是它... '((ViewGroup中)MyView的).addView(mycoverFlow,LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);'和'去除mycoverFlow .setAdapter(new ImageAdapter(getActivity()));' 感谢您花时间浏览所有内容并提供帮助,非常感谢! – user1446988 2013-03-08 22:43:12