2016-06-17 2 views
1

이 클래스에 coverflow 객체를 추가하려고하는데 해결 방법이 없습니다. 나는 안드로이드 개발에 새로운 사람이다.조각 클래스에서 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와 수준의 해상력 ....

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

가능한 복제 (http://stackoverflow.com/questions/12108370/how-to-setcontentview-in-a-fragment) –

답변

1

당신은 조각의 내용보기를 설정하지 마십시오. 대신보기를 초기화하고 이미 수행 한 것처럼 되돌립니다. 따라서 this.setContentView(coverFlow); 만 제거하면 제대로 작동합니다.

1

방법 setContentView은 활동에만 사용됩니다.

조각을 사용할 때는 onCreateView 방법으로 View을 돌려 보내야합니다.

@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; 
} 
[어떻게 조각으로 된 setContentView하는?]의
+0

내가 찾을 수 없습니다 androd .... object에 대한 addview() 메소드. –

+0

나는 그 대답을 편집하고, 지금 시도한다. 작동하지 않으면'events.xml'을 게시하십시오. –