Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách thêm viền và bóng cho ImageView tròn trong Android

Ví dụ này minh họa cách tạo ImageView tròn có viền (border) và bóng (shadow) bằng Canvas và RoundedBitmapDrawable.

Bước 1: Tạo dự án mới

Tạo dự án mới trong Android Studio.

Bước 2: Cấu hình layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:id="@+id/rl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp"
    tools:context=".MainActivity">
    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />
    <Button
        android:id="@+id/btn_circular"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:text="Tạo tròn + viền + bóng" />
</RelativeLayout>

Bước 3: Code MainActivity (src/MainActivity.java)

package com.app.sample;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {
    private Context mContext;
    private Resources mResources;
    private RelativeLayout mRelativeLayout;
    private Button mBtnCircular;
    private ImageView mImageView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mContext = getApplicationContext();
        mResources = getResources();
        mRelativeLayout = findViewById(R.id.rl);
        mImageView = findViewById(R.id.iv);
        mBtnCircular = findViewById(R.id.btn_circular);
        
        final Bitmap srcBitmap = BitmapFactory.decodeResource(mResources, R.drawable.flower);
        mImageView.setImageBitmap(srcBitmap);
        
        mBtnCircular.setOnClickListener(view -> {
            Paint paint = new Paint();
            int srcW = srcBitmap.getWidth();
            int srcH = srcBitmap.getHeight();
            int borderWidth = 25;
            int shadowWidth = 10;
            int dstSize = Math.min(srcW, srcH) + borderWidth * 2;
            
            Bitmap dstBitmap = Bitmap.createBitmap(dstSize, dstSize, Bitmap.Config.ARGB_8888);
            Canvas canvas = new Canvas(dstBitmap);
            canvas.drawColor(Color.WHITE);
            
            // Vẽ ảnh gốc vào giữa
            canvas.drawBitmap(srcBitmap, (dstSize - srcW) / 2f, (dstSize - srcH) / 2f, null);
            
            // Vẽ viền trắng (tạo khoảng trống cho bóng)
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(borderWidth * 2);
            paint.setColor(Color.WHITE);
            canvas.drawCircle(canvas.getWidth() / 2f, canvas.getHeight() / 2f, canvas.getWidth() / 2f, paint);
            
            // Vẽ bóng xám
            paint.setColor(Color.LTGRAY);
            paint.setStrokeWidth(shadowWidth);
            canvas.drawCircle(canvas.getWidth() / 2f, canvas.getHeight() / 2f, canvas.getWidth() / 2f, paint);
            
            // Tạo drawable tròn
            RoundedBitmapDrawable rounded = RoundedBitmapDrawableFactory.create(mResources, dstBitmap);
            rounded.setCircular(true);
            rounded.setAntiAlias(true);
            mImageView.setImageDrawable(rounded);
        });
    }
}

Bước 4: Cấu hình Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.app.sample">
    <application ...>
        <activity android:name=".MainActivity">...</activity>
    </application>
</manifest>

Chạy ứng dụng

Nhấn nút "Tạo tròn + viền + bóng" để thấy ảnh biến thành tròn với viền trắng và bóng xám.

Cách thêm viền và bóng cho ImageView tròn trong Android