2016-06-17 3 views
1

Я хочу добавить объект coverflow в этом классе, и я не нашел способа его решить. Я новичок в разработке Android.Как вызвать метод setContentView из класса фрагмента?

public class NoticeEvents extends Fragment { 

View android; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    android = inflater.inflate(R.layout.events, container, false); 

    CoverFlow coverFlow; 
    coverFlow = new CoverFlow(getContext()); 

    coverFlow.setAdapter(new ImageAdapter(getContext())); 

    ImageAdapter coverImageAdapter = new ImageAdapter(getContext()); 

    coverImageAdapter.createReflectedImages(); 

    coverFlow.setAdapter(coverImageAdapter); 

    coverFlow.setSpacing(-15); 
    coverFlow.setSelection(8, true); 

    // i got error for this line but i need to add the coverflow object 
    this.setContentView(coverFlow); 

     return android; 
} 

public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground; 
    private Context mContext; 

    private FileInputStream fis; 

    private Integer[] mImageIds = { 
      R.drawable.asd, 
      R.drawable.asd, 
      R.drawable.asd, 
      R.drawable.asd, 
      R.drawable.asd, 
      R.drawable.asd, 
      R.drawable.asd, 
      R.drawable.asd 
    }; 

    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), Bitmap.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, 
        Shader.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(PorterDuff.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(ImageView.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.MATRIX); 
     //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))); 
    } 

} 
} 

и вот мой класс CoverFlow Defination ....

public class CoverFlow extends CoverAbsSpinner implements GestureDetector.OnGestureListener { 
.... 
} 
+1

Возможный дубликат [Как setContentView в фрагменте?] (Http://stackoverflow.com/questions/12108370/how-to-setcontentview-in-a-fragment) –

ответ

1

Вы не установлен вид контента в осколках. Вместо этого вы инициализируете свои представления и возвращаете их, как вы уже делаете. Поэтому просто удалите this.setContentView(coverFlow);, и он должен работать.

1

Способ setContentView предназначен для деятельности.

При использовании фрагментов вы должны вернуть View в свой метод onCreateView.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    ViewGroup android = (ViewGroup) inflater.inflate(R.layout.events, container, false); 

    CoverFlow coverFlow; 
    coverFlow = new CoverFlow(getContext()); 

    ImageAdapter coverImageAdapter = new ImageAdapter(getContext()); 

    coverImageAdapter.createReflectedImages(); 

    coverFlow.setAdapter(coverImageAdapter); 

    coverFlow.setSpacing(-15); 
    coverFlow.setSelection(8, true); 


    android.addView(coverFlow); 
    return android; 
} 
+0

я не могу найти addview() для объекта androd .... .... –

+0

Я отредактировал ответ, попробуйте сейчас. Если это не работает, напишите свой 'events.xml', пожалуйста –

Смежные вопросы