如何在Android上使用带有淡化边缘的背景或图像?

时间:2014-05-16 13:59:16

标签: android image background fade

我想在背景上有一个较小的图片/背景颜色的背景,但我希望较小的图片/背景的边缘有褪色的边缘,所以它不仅仅是一个方形砖。

这里是我的FrameLayout上的背景图像和Framelayout内的LinearLayout上的白色代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    tools:context="com.example.snake.LevelScoreActivity"
    tools:ignore="MergeRootFrame"
    android:background="@drawable/snakebackground">

    <TextView
        android:id="@+id/outputTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:text="Level X Score" 
        android:textSize="14dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:background="#ffffff">

    <TextView
        android:id="@+id/output"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:gravity="center"
        android:text="Username" />

    <TextView
        android:id="@+id/output2"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:gravity="center"
        android:text="Score" />

    <TextView
        android:id="@+id/output3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:gravity="center"
        android:text="Timestamp" />

    </LinearLayout>

        <TextView
        android:id="@+id/outputNoScore"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:gravity="center"
        android:layout_gravity="center"
        android:text="" 
        android:textSize="14dp"/>

</FrameLayout>

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您应该直接在图像编辑器软件中淡化图像,而不是在Android应用程序中进行淡化,而淡入淡出宽度取决于变量......

答案 1 :(得分:0)

尝试这个自定义BitmapDrawable:

class BD extends BitmapDrawable {
    private Paint mPaint;
    private Paint mSrcInPaint;
    private int mRadius;
    private Rect mDrawRect;

    public BD(Resources res, Bitmap b, int radius) {
        super(res, b);
        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mPaint.setMaskFilter(new BlurMaskFilter(radius, Blur.NORMAL));

        mSrcInPaint = new Paint();
        mSrcInPaint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        mRadius = radius;
        mDrawRect = new Rect();
    }

    @Override
    public void draw(Canvas canvas) {
        int cnt = canvas.saveLayer(null, null, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
        mDrawRect.set(getBounds());
        mDrawRect.inset(mRadius, mRadius);
        canvas.drawRect(mDrawRect, mPaint);

        canvas.saveLayer(null, mSrcInPaint, Canvas.HAS_ALPHA_LAYER_SAVE_FLAG);
        super.draw(canvas);
        canvas.restoreToCount(cnt);
    }
}