A iOS ritratto:
"Un sacco di altra tutorial e codici di esempio non producono lanci 3D credibili. Una semplice rotazione sull'asse y non è ciò che viene fatto in iOS. " Dopo quasi 30 ore alla ricerca di campioni devo essere d'accordo. Ho un film, dove potrei fare uno screenshot al centro. Il lato destro della vista ha: - un movimento a sinistra E una riduzione al 95%. Il lato sinistro della vista ha: - un movimento sul lato destro E un restringimento all'80%.
Alla Android completa (stato iniziale):
mezzo Android:
codice di Android:
// @param interpolatedTime The value of the normalized time (0.0 to 1.0)
// @param t The Transformation object to fill in with the current transforms.
protected void applyTransformation(float interpolatedTime, Transformation t){
float degrees = toDegree*interpolatedTime;
//float rad = (float) (degrees * Math.PI/180.0f);
Matrix matrix = t.getMatrix();
camera.save();
camera.rotateY(degrees);
camera.getMatrix(matrix);
camera.restore();
matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy)
matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M
}
Una versione migliorata del codice può essere trovata nella maggior parte dei esempi :
// @param interpolatedTime The value of the normalized time (0.0 to 1.0)
// @param t The Transformation object to fill in with the current transforms.
protected void applyTransformation(float interpolatedTime, Transformation t){
float degrees = toDegree*interpolatedTime;
//float rad = (float) (degrees * Math.PI/180.0f);
Matrix matrix = t.getMatrix();
camera.save();
camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
camera.rotateY(degrees);
camera.getMatrix(matrix);
camera.restore();
matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy)
matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M
}
Alcune differenze sono: - il lato destro della vista non si muove come come l'iOS.
Ecco gli assi della macchina fotografica Android:
io credo che una traslazione su Z. non risolvere il problema. Forse aveva bisogno anche di uno strizzacervelli in qualche modo.
float dz = (float) (centerX * Math.sin(rad));
camera.translate(0f, 0f, -dz);
Ancora non abbastanza. Per molto è il rimpicciolire il lato sinistro.
look per android.R.anim in resp. cartella versione sdk puoi trovare alcuni esempi. –