【问题标题】:Increase animation speed when using Clipdrawable in Android studio?在 Android Studio 中使用 Clipdrawable 时提高动画速度?
【发布时间】:2023-03-24 13:13:02
【问题描述】:

来自这个帖子:How to Customize a Progress Bar In Android

我使用 ClipDrawAble 动画制作了自己的进度条,效果很好,代码在这里:

public class MainActivity extends AppCompatActivity {

private EditText etPercent;
private ClipDrawable mImageDrawable;

private Button fly_to_50;

// a field in your class
private int mLevel = 0;
private int fromLevel = 0;
private int toLevel = 0;

//public static final int MAX_LEVEL = 10000;

public static final int MAX_LEVEL = 10000;
public static final int LEVEL_DIFF = 100;
public static final int DELAY = 0;
public static final int START_AT_50 = 50;




private Handler mUpHandler = new Handler();
private Runnable animateUpImage = new Runnable() {

    @Override
    public void run() {
        doTheUpAnimation(fromLevel, toLevel);
    }
};

private Handler mDownHandler = new Handler();
private Runnable animateDownImage = new Runnable() {

    @Override
    public void run() {
        doTheDownAnimation(fromLevel, toLevel);
    }
};

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


    etPercent = (EditText) findViewById(R.id.etPercent);

    ImageView img = (ImageView) findViewById(R.id.imageView1);
    mImageDrawable = (ClipDrawable) img.getDrawable();
    mImageDrawable.setLevel(0);
}





private void doTheUpAnimation(int fromLevel, int toLevel) {
    mLevel += LEVEL_DIFF;
    mImageDrawable.setLevel(mLevel);
    if (mLevel <= toLevel) {
        mUpHandler.postDelayed(animateUpImage, DELAY);

    } else {
        mUpHandler.removeCallbacks(animateUpImage);
        MainActivity.this.fromLevel = toLevel;
    }
}



private void doTheDownAnimation(int fromLevel, int toLevel) {
    mLevel -= LEVEL_DIFF;
    mImageDrawable.setLevel(mLevel);
    if (mLevel >= toLevel) {
        mDownHandler.postDelayed(animateDownImage, DELAY);


    } else {
        mDownHandler.removeCallbacks(animateDownImage);
        MainActivity.this.fromLevel = toLevel;
    }
}

public void onClick50(View v){
    mImageDrawable.setLevel(START_AT_50);

}

public void onClickOk(View v) {
    //int temp_level = ((Integer.parseInt(etPercent.getText().toString())) * MAX_LEVEL) / 100;
    int temp_level = ((Integer.parseInt(etPercent.getText().toString())) * MAX_LEVEL) / 100;

    if (toLevel == temp_level || temp_level > MAX_LEVEL) {
        return;
    }
    toLevel = (temp_level <= MAX_LEVEL) ? temp_level : toLevel;
    if (toLevel > fromLevel) {
        // cancel previous process first
        mDownHandler.removeCallbacks(animateDownImage);
        MainActivity.this.fromLevel = toLevel;

        mUpHandler.post(animateUpImage);
    } else {
        // cancel previous process first
        mUpHandler.removeCallbacks(animateUpImage);
        MainActivity.this.fromLevel = toLevel;

        mDownHandler.post(animateDownImage);
    }
}

}

我将“DELAY”变量设置为 0,这稍微提高了速度,但是,我对速度并不完全满意,希望能进一步提高速度。这有可能吗?如果没有,我是否有机会创建一个正常的进度(肯定会在这里工作),但使用我自己的自定义编辑图像?

感谢所有答案!

谢谢。

【问题讨论】:

    标签: java android android-studio animation progress-bar


    【解决方案1】:

    已解决:

    我改变了这一行:

    mDownHandler.postDelayed(animateDownImage, DELAY);
    

    用这个:

    mDownHandler.postAtTime(animateDownImage,DELAY);
    

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 2017-12-25
      • 2014-02-16
      • 2021-07-06
      • 1970-01-01
      • 2017-06-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多