Android 图像反转时添加进度条

Android 图像反转时添加进度条,android,android-progressbar,android-bitmap,Android,Android Progressbar,Android Bitmap,我有一个简单的代码,当我按下按钮时,它运行得非常完美,它反转了我的图像视图的原始图像。这样做需要3到4秒钟。我想在任务之间添加进度条,以通知用户我如何才能做到这一点?在哪里可以添加进度条 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_invert_image); mImage

我有一个简单的代码,当我按下按钮时,它运行得非常完美,它反转了我的图像视图的原始图像。这样做需要3到4秒钟。我想在任务之间添加进度条,以通知用户我如何才能做到这一点?在哪里可以添加进度条

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_invert_image);

    mImageView = (ImageView) findViewById(R.id.myIView);

    mImageView.setImageResource(R.mipmap.myimage);
    invertButton = (Button) findViewById(R.id.invertButton);

    invertButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mImageView.buildDrawingCache();
            Bitmap image = mImageView.getDrawingCache();
            Bitmap readyImage = invertImage(image);
            mImageView.setImageBitmap(readyImage);

        }
    });
}

public Bitmap invertImage(Bitmap original){

    Bitmap finalBitmap = Bitmap.createBitmap(original.getWidth(), original.getHeight(), original.getConfig());

    int A, R, G, B, pixelColor;
    int height = original.getHeight();
    int width = original.getWidth();

    for(int x = 0; x < height; x++){
        for(int y = 0; y < width; y++){
            pixelColor = original.getPixel(y,x);
            A = Color.alpha(pixelColor);
            R = 255 - Color.red(pixelColor);
            G = 255 - Color.green(pixelColor);
            B = 255 - Color.blue(pixelColor);

            finalBitmap.setPixel(y, x, Color.argb(A,R,G,B));
        }
    }

    return finalBitmap;
}
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u invert\u image);
mImageView=(ImageView)findviewbyd(R.id.myIView);
setImageResource(R.mipmap.myimage);
invertButton=(按钮)findViewById(R.id.invertButton);
invertButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mImageView.buildDrawingCache();
位图image=mImageView.getDrawingCache();
位图readyImage=反转图像(图像);
setImageBitmap(readyImage);
}
});
}
公共位图图像(位图原始){
位图finalBitmap=Bitmap.createBitmap(original.getWidth()、original.getHeight()、original.getConfig());
inta,R,G,B,pixelColor;
int height=original.getHeight();
int width=original.getWidth();
对于(int x=0;x

指南…

您可以这样做,将初始for循环的增量设置为整个循环的一部分,在本例中x=高度

private ProgressBar mProgress; // Note your will need to implement the progress bar.

public Bitmap invertImage(Bitmap original){

    .../...

    while (mProgressStatus < 100) 

        for(int x = 0; x < height; x++){
            mProgressStatus = x/height*100;
            mProgress.setProgress(mProgressStatus);
            for(int y = 0; y < width; y++){
            .../...
            finalBitmap.setPixel(y, x, Color.argb(A,R,G,B));
        }
    }

    return finalBitmap; 
}
private ProgressBar mProgress;//注意,您需要实现进度条。
公共位图图像(位图原始){
.../...
而(mProgressStatus<100)
对于(int x=0;x
从文件中

公共类MyActivity扩展活动{
私有静态最终整数进度=0x1;
私人进度律师程序;
private int mProgressStatus=0;
私有处理程序mHandler=新处理程序();
创建时受保护的空隙(捆绑冰柱){
超级冰柱;
setContentView(R.layout.progressbar_活动);
mProgress=(ProgressBar)findviewbyd(R.id.progress\u bar);
//在后台线程中启动冗长的操作
新线程(newrunnable()){
公开募捐{
而(mProgressStatus<100){
mProgressStatus=doWork();
//更新进度条
mHandler.post(新Runnable(){
公开募捐{
mProgress.setProgress(mProgressStatus);
}
});
}
}
}).start();
}
}

谢谢..在您代码的开头是int i=0;而不是x,对吗?由于x已经被分配到for循环中…混乱…加上mProgressBarStatus值也让我感到困惑。。因为它的方程(高度-x)*100会使它的第一个值超过100,所以它自己…没问题。现在它看起来很完美,所以我必须将状态值初始化为0,那么int x=0怎么办?不起作用..添加了progressbar,只是在启动时在图像上运行了progressbar,当我单击按钮时,活动冻结
public class MyActivity extends Activity {
 private static final int PROGRESS = 0x1;

 private ProgressBar mProgress;
 private int mProgressStatus = 0;

 private Handler mHandler = new Handler();

 protected void onCreate(Bundle icicle) {
     super.onCreate(icicle);

     setContentView(R.layout.progressbar_activity);

     mProgress = (ProgressBar) findViewById(R.id.progress_bar);

     // Start lengthy operation in a background thread
     new Thread(new Runnable() {
         public void run() {
             while (mProgressStatus < 100) {
                 mProgressStatus = doWork();

                 // Update the progress bar
                 mHandler.post(new Runnable() {
                     public void run() {
                         mProgress.setProgress(mProgressStatus);
                     }
                 });
             }
         }
     }).start();
 }
}