我知道这个问题之前已经回答过好几次了,但是这个新手找不到有效的答案。
我尝试使用 TouchImageView(扩展 ImageView)实现全景查看器。首先,我尝试使用 TranslateAnimation,但也失败了(我的问题没有答案,所以我认为这对于 TouchImageView 是不可能的)。
然后我尝试了艰难的方式,使用 ImageView.matrix,移动一点,暂停,移动一点,暂停......好吧,至少这是我的想法。
问题是我只能在 4 或 5 秒后看到全景图的最终位置,什么也没有。我什至放了两个ImageView.invalidate();
,没有任何成功。我尝试使用 Threads 和 AsyncTasks 也没有成功(问题是它们必须更新主 UI,否则我会得到一个异常;但在我看来使用 AsyncTask 来更新 UI 线程是错误的)。好吧,我尝试了我能想到的一切。
无论如何,下面是我的简单代码(AsyncTask 尝试,但我所做的一切都在里面)。观察不遵守foto.invalidate();
的onPreExecute
方法中的(为什么?)。有一些评论让你看看我还尝试了什么。
我的简单代码,foto
(Touch)ImageView 在哪里:
class animatepanorama extends AsyncTask<Void, Void, Void> {
float scale = foto.cropScale * foto.baseScale;
Matrix m = foto.matrix;
protected void onPreExecute(Void arg0) {
m.setScale(scale, scale);
foto.Scale = foto.cropScale;
foto.setImageMatrix(m);
foto.invalidate();
}
@Override
protected Void doInBackground(Void... arg0) {
// new Thread(new Runnable() { public void run() {
//synchronized(foto) {
runOnUiThread(new Runnable() {
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(25);
} catch (InterruptedException e) {
e.printStackTrace();
}
m.setScale(scale, scale);
m.postTranslate(-i * scale * 8, 0);
foto.setImageMatrix(m);
foto.invalidate();
}
}
});
//}
// }}).start();
return null;
}
protected void onPostExecute(Void arg0) {
foto.invalidate();
}
}
谢谢!!