Android 원 각 테두리 구현 방식 집합
방식 1:shape 요 소 를 사용 하여 배경 을 채 우 고 원 각/라디안 각 을 설정 합 니 다.
1.먼저\res\drawable 에서 Shape 를 루트 요소 로 하 는 자원 파일 을 새로 만 듭 니 다:cornersbg.xml,코드 는 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- -->
<solid android:color="#FFFFFF" />
<!-- -->
<corners android:radius="10dp"/>
<!-- -->
<stroke android:color="#CD2626"
android:width="2dp"/>
</shape>
2.layot 레이아웃 파일 에서 원 각 이 필요 한 컨트롤 에 대해 첫 번 째 xml 파일 을 배경 으로 참조 하면 됩 니 다.그림 과 같다3.효 과 는 demo 프로그램 효과 그림 의 그림 효과 로 나타 납 니 다.
방식 2:사용.9<9 매>원 각 그림 을 배경 으로 설정 합 니 다.
그림 mmtitle_act_btn_normal.9.png 는 원 각 이 있 는 그림 으로 컨트롤[여 기 는 Button]배경 자원 으로 참조 하면 됩 니 다.데모 프로그램 효과 그림 의 그림 2 효 과 를 표시 합 니 다.
방식 3:컨트롤 을 다시 쓰 는 draw 방법[여 기 는 ImageView 계승 을 예 로 들 겠 습 니 다]:다시 draw 방법 으로 컨트롤 의 원 각 효 과 를 그립 니 다.
1.CornersImageView.자바 사용자 정의 원 각 ImageView 코드 는 다음 과 같 습 니 다.
package com.ice.cornersdemo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
/**
* ImageView
* Created by ice on 14-8-6.
*/
public class CornersImageView extends ImageView{
private Bitmap mBitmap;
private BitmapShader mBitmapShader;
private final Matrix mShaderMatrix = new Matrix();
private final Paint mBitmapPaint = new Paint();
private final RectF mDrawableRect = new RectF();
private float mDrawableRadius;
private int mBitmapWidth;
private int mBitmapHeight;
private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
private static final int COLORDRAWABLE_DIMENSION = 1;
public CornersImageView(Context context)
{
super(context);
}
public CornersImageView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public CornersImageView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
init();
}
private void init() {
if (mBitmap == null)
{
return;
}
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//
mBitmapPaint.setAntiAlias(true);
//
mBitmapPaint.setShader(mBitmapShader);
mBitmapWidth = mBitmap.getWidth();
mBitmapHeight = mBitmap.getHeight();
mDrawableRect.set(0, 0, mBitmapWidth, mBitmapHeight);
//
mDrawableRadius = Math.min(mDrawableRect.width()/2, mDrawableRect.height()/2);
invalidate();
}
@Override
public void draw(Canvas canvas)
{
if (getDrawable() == null)
{
return;
}
canvas.drawCircle(getWidth()/2, getHeight()/2, mDrawableRadius, mBitmapPaint);
}
@Override
public void setImageBitmap(Bitmap bm) {
super.setImageBitmap(bm);
mBitmap = bm;
init();
}
@Override
public void setImageDrawable(Drawable drawable) {
super.setImageDrawable(drawable);
mBitmap = getBitmapFromDrawable(drawable);
init();
}
@Override
public void setImageResource(int resId) {
super.setImageResource(resId);
mBitmap = getBitmapFromDrawable(getDrawable());
init();
}
/**
* Drawable Bitmap
* @param drawable
* @return
*/
private Bitmap getBitmapFromDrawable(Drawable drawable) {
if (drawable == null) {
return null;
}
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
}
try {
Bitmap bitmap;
if (drawable instanceof ColorDrawable) {
bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION,
BITMAP_CONFIG);
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
BITMAP_CONFIG);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
} catch (OutOfMemoryError e) {
return null;
}
}
}
2.레이아웃 파일 에서 사용자 정의 컨트롤 을 사용 합 니 다.CornersImageView 는 다음 과 같 습 니 다.3.데모 프로그램 효과 그림 의 그림 3 효과 표시
기타:사실 그림 의 원형 디 스 플레이 를 실현 하기 전에 소개 한 이미지 뷰 를 다시 쓰 는 draw 방법 은 컨트롤 자체 에서 처리 하 는 것 이 고 더 간단 한 방법 은 표시 할 그림 에 대해 처리 하고 그림 자 체 를 원형 으로 잘라 서 컨트롤 이미지 뷰 에 표시 하 는 것 이다.
그림 의 원형 을 자 르 는 방법 은 다음 과 같다.
/**
*
* @param bitmap
* @return
*/
public static Bitmap getCircleBitmap(Bitmap bitmap) {
Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
RectF rectF = new RectF(rect);
Paint paint = new Paint();
paint.setAntiAlias(true); //
paint.setFilterBitmap(true); //
canvas.drawOval(rectF, paint); // rectF /
// SRC_IN
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rectF, paint);
return output;
}
코드 에 있어 서 우 리 는 그림 을 표시 할 Bitmap 대상 을 얻 은 후에 위의 방법 을 호출 합 니 다.getCircleBitmap(Bitmap bitmap)를 원형 으로 자 른 후 새로운 Bitmap 대상 을 얻 은 다음 ImageView 방법 을 사용 하여 setImageBitma(Bitmapbitmap)를 컨트롤 에 표시 합 니 다.데모 프로그램 효과 그림 의 그림 4 효 과 를 표시 합 니 다.
[그림 3 효과 와 같다]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.