Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Have solved using <a href="http://developer.android.com/reference/android/view/ScaleGestureDetector.html" rel="nofollow">ScaleGestureDetector</a>.</p> <p>Following is the sample code:</p> <pre><code>public class MainActivity extends RajawaliExampleActivity implements OnTouchListener, OnObjectPick {// , // BackfromTemple // { private RajawaliLoadModelRenderer mRenderer; private float mPreviousX; // private float mPreviousY; private final float TOUCH_SCALE_FACTOR = 180.0f / 320; private ScaleGestureDetector mScaleDetector; private boolean isRotationStarted; private boolean firsttime = false; private Camera cam; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mRenderer = new RajawaliLoadModelRenderer(this); mRenderer.setSurfaceView(mSurfaceView); super.setRenderer(mRenderer); mSurfaceView.setOnTouchListener(this); initLoader(); mScaleDetector = new ScaleGestureDetector(getBaseContext(), mRenderer); firsttime = false; cam = mRenderer.getCamera(); mSurfaceView.setPreserveEGLContextOnPause(true); } void showProgressDialog(final Context c, final String msg) { runOnUiThread(new Runnable() { @Override public void run() { pd = new ProgressDialog(c); pd.setMessage(msg); pd.setCancelable(false); pd.setIndeterminate(true); if (!pd.isShowing()) { pd.show(); } } }); } protected void hideProgressDialog() { runOnUiThread(new Runnable() { @Override public void run() { if (pd != null &amp;&amp; pd.isShowing()) { pd.dismiss(); } } }); } @Override protected void onRestart() { super.onRestart(); firsttime = true; isRotationStarted = false; mRenderer.mPickedObject = null; runOnUiThread(new Runnable() { @Override public void run() { if (SuperActivity.pd != null &amp;&amp; SuperActivity.pd.isShowing()) { SuperActivity.pd.dismiss(); } } }); } @Override public boolean onTouchEvent(MotionEvent e) { mScaleDetector.onTouchEvent(e); float x = e.getX(); float y = e.getY(); if (e.getAction() == MotionEvent.ACTION_MOVE) { float dx = x - mPreviousX; // float dy = y - mPreviousY; if (Math.abs(dx) &gt; 2.5) { isRotationStarted = true; mRenderer.mObjectGroup.getRotation().y -= dx * TOUCH_SCALE_FACTOR; } // else if (Math.abs(dy) &gt; 2.5) { // isRotationStarted = true; // mRenderer.mObjectGroup.getRotation().x -= dy * // TOUCH_SCALE_FACTOR; // } } mPreviousX = x; return false; } @Override public boolean onTouch(View v, MotionEvent event) { mScaleDetector.onTouchEvent(event); float x = event.getX(); // float y = event.getY(); if (event.getAction() == MotionEvent.ACTION_DOWN) { mRenderer.getObjectAt(event.getX(), event.getY()); // if (mRenderer.isObjectPicked) { // showProgressDialog(); // } } else if (event.getAction() == MotionEvent.ACTION_MOVE) { // if (mRenderer.isObjectPicked) { float dx = x - mPreviousX; // float dy = y - mPreviousY; if (Math.abs(dx) &gt; 2.5 &amp;&amp; mRenderer.mObjectGroup != null) { isRotationStarted = true; mRenderer.mObjectGroup.getRotation().y -= dx * TOUCH_SCALE_FACTOR; } // else if (Math.abs(dy) &gt; 2.5 &amp;&amp; mRenderer.mObjectGroup != null) { // isRotationStarted = true; // mRenderer.mObjectGroup.getRotation().x -= dy * // TOUCH_SCALE_FACTOR; // } // } } else if (event.getAction() == MotionEvent.ACTION_CANCEL || event.getAction() == MotionEvent.ACTION_UP) { isRotationStarted = false; mRenderer.mPickedObject = null; // runOnUiThread(new Runnable() { // @Override // public void run() { // if (!mRenderer.isObjectPicked) { // hideProgressDialog(); // isRotationStarted = false; // mRenderer.isObjectPicked = false; // mRenderer.mPickedObject = null; // } // } // }); } mPreviousX = x; // mPreviousY = y; return true; } @Override public void objSelected(BaseObject3D object) { final Intent i = new Intent(this, newactivity.class); String objName = object.getName(); isRotationStarted = false; mRenderer.mPickedObject = null; startActivity(i); }} </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload