2016-02-01 3 views
0
<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="0.24"> 
     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 
     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:src="@drawable/background_tree" 
      /> 
      <AbsoluteLayout 
       android:id="@+id/llMapContainer" 
       android:layout_width="match_parent" 
       android:layout_height="390dp" 
       android:layout_x="0dp" 
       android:layout_y="44dp" 
       android:orientation="vertical" > 

       <ImageView 
        android:id="@+id/imgLocation" 
        android:layout_width="65dp" 
        android:layout_height="65dp" 
        android:layout_x="48px" 
        android:layout_y="440px" 
        android:src="@drawable/character_icon" /> 
      </AbsoluteLayout> 
     </RelativeLayout> 
    </LinearLayout> 

Я хочу разместить ImageView в кругах дерева в моем XML-файле. Я пытался использовать координаты, но менял свои позиции с разным размером экрана.Я хочу разместить изображение в круговом движении в xml

+0

Не ясно, что вы просите. – Rohit5k2

+0

Я хочу, чтобы изображение места отличалось в разных изображениях. Их позиция будет оставаться постоянной в разных мобильных телефонах, например, 5.5, 5.2.4.7 дюймовый экран – Nikhil

ответ

0

Шаг 1: Создание CircularimageView.class

public class CircularImageView extends ImageView { 
     private int borderWidth; 
     private int viewWidth; 
     private int viewHeight; 
     private Bitmap image; 
     private Paint paint; 
     private Paint paintBorder; 
     private BitmapShader shader; 

     public CircularImageView(Context context) { 
      super(context); 
      setup(); 
     } 

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

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

     private void setup() { 
      // init paint 
      paint = new Paint(); 
      paint.setAntiAlias(true); 

      paintBorder = new Paint(); 
      setBorderColor(Color.WHITE); 
      paintBorder.setAntiAlias(true); 
      this.setLayerType(LAYER_TYPE_SOFTWARE, paintBorder); 
      this.setBorderWidth(2); 
      paintBorder.setShadowLayer(4.0f, 0.0f, 2.0f, Color.BLACK); 
     } 

     public void setBorderWidth(int borderWidth) { 
      this.borderWidth = borderWidth; 
      this.invalidate(); 
     } 

     public void setBorderColor(int borderColor) { 
      if (paintBorder != null) 
       paintBorder.setColor(borderColor); 

      this.invalidate(); 
     } 

     private void loadBitmap() { 
      BitmapDrawable bitmapDrawable = (BitmapDrawable) this.getDrawable(); 

      if (bitmapDrawable != null) 
       image = bitmapDrawable.getBitmap(); 
     } 

     @SuppressLint("DrawAllocation") 
     @Override 
     public void onDraw(Canvas canvas) { 
      // load the bitmap 
      loadBitmap(); 

      // init shader 
      if (image != null) { 
       shader = new BitmapShader(Bitmap.createScaledBitmap(image, canvas.getWidth(), canvas.getHeight(), false), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); 
       paint.setShader(shader); 
       int circleCenter = viewWidth/2; 

       // circleCenter is the x or y of the view's center 
       // radius is the radius in pixels of the cirle to be drawn 
       // paint contains the shader that will texture the shape 
       canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter + borderWidth - 4.0f, paintBorder); 
       canvas.drawCircle(circleCenter + borderWidth, circleCenter + borderWidth, circleCenter - 4.0f, paint); 
      } 
     } 

     @Override 
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      int width = measureWidth(widthMeasureSpec); 
      int height = measureHeight(heightMeasureSpec, widthMeasureSpec); 

      viewWidth = width - (borderWidth * 2); 
      viewHeight = height - (borderWidth * 2); 

      setMeasuredDimension(width, height); 
     } 

     private int measureWidth(int measureSpec) { 
      int result = 0; 
      int specMode = MeasureSpec.getMode(measureSpec); 
      int specSize = MeasureSpec.getSize(measureSpec); 

      if (specMode == MeasureSpec.EXACTLY) { 
       // We were told how big to be 
       result = specSize; 
      } else { 
       // Measure the text 
       result = viewWidth; 
      } 

      return result; 
     } 

     private int measureHeight(int measureSpecHeight, int measureSpecWidth) { 
      int result = 0; 
      int specMode = MeasureSpec.getMode(measureSpecHeight); 
      int specSize = MeasureSpec.getSize(measureSpecHeight); 

      if (specMode == MeasureSpec.EXACTLY) { 
       // We were told how big to be 
       result = specSize; 
      } else { 
       // Measure the text (beware: ascent is a negative number) 
       result = viewHeight; 
      } 

      return (result + 2); 
     } 
    } 

Шаг 2: В layout.xml

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="0.24"> 
     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 

    <com.packagename.CircularImageView 
      android:id="@+id/imgLocation" 
      android:layout_width="65dp" 
      android:layout_height="65dp" 
      android:layout_x="48px" 
      android:layout_y="440px" 
      android:src="@drawable/character_icon" /> 
</RelativeLayout> 
</LinearLayout> 
+0

не решить мою проблему – Nikhil

+0

попытаться использовать https://github.com/facebook/fresco –

+0

http://www.nairaland.com/2309074/how-make-circular-imageview-rounded –

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