如何在android中仅绘制一幅图像?
其目的是有一个空水桶,并根据(改变的)系统参数将其装满<代码>最小值=0,最大值=系统参数 我确实有水桶图像(如何在android中仅绘制一幅图像?,android,android-imageview,android-animation,Android,Android Imageview,Android Animation,其目的是有一个空水桶,并根据(改变的)系统参数将其装满最小值=0,最大值=系统参数 我确实有水桶图像(*.png带透明胶片),我知道我应该使用画布/可画物,但我如何才能在水桶内绘制水(蓝色) 我可以改变整个背景,但它会填满桶的内部和外部。以下是解决方案 第一步 复制/粘贴以下自定义类 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import andro
*.png
带透明胶片),我知道我应该使用画布/可画物
,但我如何才能在水桶内绘制水(蓝色)
我可以改变整个背景,但它会填满桶的内部和外部。以下是解决方案 第一步 复制/粘贴以下自定义类
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();
}
}
公共类MainActivity扩展活动{
DrawView视图;
整数百分比=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
视图=(DrawView)findViewById(R.id.view1);
线程t=新线程(){
公开募捐{
而(百分比<99){
MainActivity.this.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
视图。设置百分比(百分比);
百分比++;
}
});
试一试{
睡眠(100);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
};
t、 start();
}
}
注意
这是一个粗略的例子。您需要根据需要更改DrawView
。我刚刚用蓝色填充了那个长方形
您可以使用
setPercentage(int)
方法DrawView
在绘制第二个一组剪辑区域画布之前,使用两个PNG填充矩形:一个是空的,一个是满的。clipRect()显示当前的水位我有一个解决方案。。请稍等。。测试并给您一份该文件的工作副本:)请核对我的答案。你觉得这很有帮助。如果它对您有帮助,请接受并向上投票:)它在view.setPercentage(percentage)上提供空指针验证。不可能。你对代码做了什么修改吗?这是一个经过测试的代码。我已经写了它并在设备上签了名。运行非常顺利。不,只是复制/粘贴。如果我对view.setPercentage(percentage)行进行注释,它可以正常工作。您可以向我显示它提供的代码行或错误的日志吗。这样我就可以解决这个问题了…当然可以,但只能在以后-这里没有代码。但我有一个问题,它会在图像(所谓的桶)上工作,而不在外部绘制吗?我必须定义“桶”的界限吗