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