基本上如果你看一下这件作品,我再次在按钮后面做同样的事情,但它并没有“实时”。我调用view.invalidate()和view.postinvalidate()试图强制它,但没有去...
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
curRotate = (float)progress;
drawMatrix();
}
private void drawMatrix(){
Matrix matrix = new Matrix();
matrix.postScale(curScale, curScale);
matrix.postRotate(curRotate);
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, true);
myImageView.setImageBitmap(resizedBitmap);
}
答案 0 :(得分:1)
我认为你所做的是:
for (int degrees = 0 ; degrees < maxRotation ; i++) {
// perform the rotation by matrix
myImageView.invalidate();
}
这不起作用,因为invalidate()
仅调度主线程事件队列中的重绘。这意味着只有在当前代码全部执行完后才会执行重绘(在本例中为for循环)。
对于简单的轮换,Tween Animation更适合。对于更高级的内容(如游戏动画),您可能需要创建自定义视图或使用SurfaceView
。
答案 1 :(得分:0)
听起来你正在用你的代码阻止UI线程来旋转图像。
我现在没有任何代码可以显示给你(回复,当我今晚回家时,我可以发布一些应该有帮助的东西),但yuo可能会得到更好的结果,将你的轮换码放在{{3有关详细信息,请参阅开发站点的AsyncTask区域。
答案 2 :(得分:0)
我遇到了同样的问题,我用过:
runOnUiThread(new Runnable() {
public void run() {
myImageView.setImageBitmap(image);
imageView.invalidate();
}
});