2013-12-22 3 views
1

이 어댑터는 원형 이미지보기에 유용하지만 원형 이미지보기는 오른쪽에서 왼쪽으로 가능하며 왼쪽에서 오른쪽으로는 가능하지 않으므로이 코드에 무엇을 써야 이미지가 표시 될 수 있는지 제안 해주십시오. 왼쪽에서 오른쪽으로 원형도 볼 수 있니?Gallary Image Cicular with android

public class ImageAdapterCircleGallery extends BaseAdapter { 

    private Context mContext; 
    int itemBackground; 

    Integer[] mImageIds = { R.drawable.img1, R.drawable.img2, 
      R.drawable.img3, R.drawable.img4, R.drawable.img5, 
      R.drawable.img6, R.drawable.img7, R.drawable.img8, 
      R.drawable.img9, R.drawable.img10, R.drawable.img11, 
      R.drawable.img12, R.drawable.img13, R.drawable.img14, 
      R.drawable.img15, R.drawable.img16, R.drawable.img17, 
      R.drawable.img18, R.drawable.img19, R.drawable.img20, 
      R.drawable.img21, R.drawable.img22, R.drawable.img23, 
      R.drawable.img24, R.drawable.img25, R.drawable.img26, 
      R.drawable.img27, R.drawable.img28, R.drawable.img29, 
      R.drawable.img30 }; 

    public ImageAdapterCircleGallery(Context c) { 
     mContext = c; 

     TypedArray a = obtainStyledAttributes(R.styleable.Gallery1); 
     itemBackground = a.getResourceId(
       R.styleable.Gallery1_android_galleryItemBackground, 1); 
     a.recycle(); 
    } 

    public int getCount() { 
     return Integer.MAX_VALUE; 
    } 

    public Object getItem(int position) { 

     return getPosition(position); 
    } 

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

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

     /*ImageView i = new ImageView(mContext); 
     position = getPosition(position); 
     i.setImageResource(mImageIds[position]); 
     i.setLayoutParams(new Gallery.LayoutParams(100, 100)); 
     i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
     return i;*/ 

     ImageView imageView = new ImageView(mContext); 
     position = getPosition(position); 
     imageView.setImageResource(imageIDs[position]); 
     imageView.setAdjustViewBounds(true); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
     imageView.setLayoutParams(new Gallery.LayoutParams(90, 90)); 
     imageView.setBackgroundResource(itemBackground); 

     return imageView; 

    } 

    public int checkPosition(int position) { 
     return getPosition(position); 
    } 

    int getPosition(int position) { 
     if (position >= mImageIds.length) { 
      position = position % mImageIds.length; 
     } 
     return position; 
    } 
} 

답변

1

반올림 ImageView에 내 코드를 사용하십시오. 그것은 당신이 그것을 설정 어떤 이미지가 완벽하게 반올림됩니다 보장 : -

package com.example.listviewwithimages; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PorterDuff.Mode; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Rect; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.util.AttributeSet; 
import android.widget.ImageView; 

public class RoundedImageView extends ImageView { 

public RoundedImageView(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
} 

public RoundedImageView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public RoundedImageView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

@Override 
protected void onDraw(Canvas canvas) { 

    Drawable drawable = getDrawable(); 

    if (drawable == null) { 
     return; 
    } 

    if (getWidth() == 0 || getHeight() == 0) { 
     return; 
    } 
    Bitmap b = ((BitmapDrawable)drawable).getBitmap() ; 
    Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 

    int w = getWidth(), h = getHeight(); 


    Bitmap roundBitmap = getCroppedBitmap(bitmap, w); 
    canvas.drawBitmap(roundBitmap, 0,0, null); 

} 

public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { 
    Bitmap sbmp; 
    if(bmp.getWidth() != radius || bmp.getHeight() != radius) 
     sbmp = Bitmap.createScaledBitmap(bmp, radius, radius, false); 
    else 
     sbmp = bmp; 
    Bitmap output = Bitmap.createBitmap(sbmp.getWidth(), 
      sbmp.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 

    final int color = 0xffa19774; 
    final Paint paint = new Paint(); 
    final Rect rect = new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight()); 

    paint.setAntiAlias(true); 
    paint.setFilterBitmap(true); 
    paint.setDither(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(Color.parseColor("#BAB399")); 
// canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f, 
//   sbmp.getWidth()/2+0.1f, paint); 
    canvas.drawCircle(sbmp.getWidth()/2, sbmp.getHeight()/2, 
      (sbmp.getWidth()/2), paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(sbmp, rect, rect, paint); 


      return output; 
} 

} 

와 XML에

는, 다음과 같이 사용 : -

어댑터에
<com.example.listviewwithimages.RoundedImageView 
    android:id="@+id/image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:adjustViewBounds="true" 
    android:contentDescription="Big Image" /> 

,의 getView() 안의

 RoundedImageView imageView = new RoundedImageView(mContext); 
+0

내 코드에서 어떤 내용을 말해야합니까? 어떤 몸이라도 말해주세요 – kirti

+0

방금 ​​말씀 드렸습니다. 그것은 전체 클래스입니다. 둥근 이미지 뷰를 사용하고 싶을 때는 일반 ImageView 태그를 사용하지 마십시오. 위의 태그를 사용하십시오. ImageView 대신 전체 패키지 + 클래스 이름을 xml에 넣습니다. –

+0

이미지를 전달하는 방법은 내가 석회화 된 이미지 만 활발하게 표시합니다. – kirti