/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.testapp; import android.util.Log; import android.renderscript.Float3; import com.android.scenegraph.*; import com.android.scenegraph.CompoundTransform.RotateComponent; import com.android.scenegraph.CompoundTransform.TranslateComponent; public class TouchHandler { private static String TAG = "TouchHandler"; float mLastX; float mLastY; float mRotateXValue; float mRotateYValue; Float3 mDistValue; Float3 mPosValue; CompoundTransform mCameraRig; RotateComponent mRotateX; RotateComponent mRotateY; TranslateComponent mDist; TranslateComponent mPosition; Camera mCamera; public void init(Scene scene) { // Some initial values for camera position mRotateXValue = -20; mRotateYValue = 0; mDistValue = new Float3(0, 0, 45); mPosValue = new Float3(0, 4, 0); // Make a camera transform we can manipulate mCameraRig = scene.appendNewCompoundTransform(); mCameraRig.setName("CameraRig"); mPosition = mCameraRig.addTranslate("Position", mPosValue); mRotateY = mCameraRig.addRotate("RotateY", new Float3(0, 1, 0), mRotateYValue); mRotateX = mCameraRig.addRotate("RotateX", new Float3(1, 0, 0), mRotateXValue); mDist = mCameraRig.addTranslate("Distance", mDistValue); mCamera = scene.appendNewCamera(); mCamera.setTransform(mCameraRig); } public Camera getCamera() { return mCamera; } public void onActionDown(float x, float y) { mLastX = x; mLastY = y; } public void onActionScale(float scale) { if (mDist == null) { return; } mDistValue.z *= 1.0f / scale; mDistValue.z = Math.max(10.0f, Math.min(mDistValue.z, 150.0f)); mDist.setValue(mDistValue); } public void onActionMove(float x, float y) { if (mRotateX == null) { return; } float dx = mLastX - x; float dy = mLastY - y; if (Math.abs(dy) <= 2.0f) { dy = 0.0f; } if (Math.abs(dx) <= 2.0f) { dx = 0.0f; } mRotateYValue += dx * 0.25f; mRotateYValue %= 360.0f; mRotateXValue += dy * 0.25f; mRotateXValue = Math.max(mRotateXValue , -80.0f); mRotateXValue = Math.min(mRotateXValue , 0.0f); mRotateX.setAngle(mRotateXValue); mRotateY.setAngle(mRotateYValue); mLastX = x; mLastY = y; } }