如何在android中只绘制一个图像?

时间:2014-02-11 09:17:15

标签: android android-imageview android-animation

目的是使用一桶空水并根据(更改)系统参数填充它。 minimumValue = 0, maximuValue = SYSTEM_PARAMETER

我确实有水桶图像(*.png带透明胶片),我知道我应该使用canvas/drawables但是如何在水桶内画水(蓝色)呢?

我可以改变整个背景但是它会填满内部和外部的桶。

1 个答案:

答案 0 :(得分:2)

以下是解决方案。

第1步

复制/粘贴自定义类。

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.ImageView;

public class DrawView extends ImageView {

    Paint mPaint;
    int percent = 0;
    int toFillHeight;
    private RectF box;

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

    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mPaint.setColor(Color.GRAY);
        mPaint.setStyle(Paint.Style.FILL);
        box = new RectF(0, 0, getWidth(), getHeight());
    }

    public DrawView(Context context) {
        super(context);
    }

    public int calculateFillArea() {
        return percent * 200 / getHeight();
    }

    public void setPercentage(int percent) {
        this.percent = percent;
        invalidate();
    }

    @Override
    public void onDraw(Canvas canvas) {

        //you can remove these two lines if you don't want background color
        mPaint.setColor(Color.GRAY);
        canvas.drawRect(new RectF(0, 0, getWidth(), getHeight()), mPaint);

        toFillHeight = calculateFillArea();

        // Arc
        mPaint.setColor(Color.parseColor("#33b5e5"));
        box.set(0, getHeight() - toFillHeight, getWidth(), getHeight());
        canvas.drawRect(box, mPaint);

    }
}

第2步

在布局中使用该自定义类,如下所示。

<com.example.rounded.DrawView
    android:id="@+id/view1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:background="@drawable/ic_launcher"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true" />

第3步

以下是我使用它的方式。

public class MainActivity extends Activity {

    DrawView view;
    int percentage = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        view = (DrawView) findViewById(R.id.view1);

        Thread t = new Thread() {
            public void run() {
                while (percentage < 99) {
                    MainActivity.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            view.setPercentage(percentage);
                            percentage++;
                        }
                    });
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
            }
        };
        t.start();
    }
}

注意

这是一个粗略的例子。您需要根据您的要求更改DrawView。我刚用蓝色填充了那个矩形。

您可以使用setPercentage(int)的{​​{1}}方法填充矩形百分比。