(click images for a larger view)
Home » Archives for May 2012
Renault Laguna Coupe Monaco GP Limited Edition
V6 / 3.498 cc / 240 PS / 244 ft/lb (330 Nm) @ 4.400 / 0 - 62 mph (100 km/h): 7,4 s / Vmax: 152 mph (244 km/h)
(click images for a larger view)
(click images for a larger view)
Vibrate with a given pattern
Last exercise demonstrate basic of android.os.Vibrator. The method vibrate (long[] pattern, int repeat) of Vibrator cause vibrate with a given pattern.
main.xml
"android.permission.VIBRATE" is needed.
package com.exercise.AndroidVibrator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
public class AndroidVibratorActivity extends Activity {
Button buttonVibrate1, buttonVibrate2, buttonVibrate3;
Vibrator myVibrator;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonVibrate1 = (Button)findViewById(R.id.buttonVibrate1);
buttonVibrate2 = (Button)findViewById(R.id.buttonVibrate2);
buttonVibrate3 = (Button)findViewById(R.id.buttonVibrate3);
myVibrator = (Vibrator)getSystemService(AndroidVibratorActivity.VIBRATOR_SERVICE);
buttonVibrate1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myVibrator.vibrate(500);
}});
buttonVibrate2.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
myVibrator.vibrate(1000);
}else if(action == MotionEvent.ACTION_UP){
myVibrator.cancel();
}
return true;
}});
buttonVibrate3.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
long[] pattern = {
50, //Off before vibration
100, 100, //on-off
100, 1000, //on-off
};
myVibrator.vibrate(pattern, 0); //repeat from pattern[0]
}else if(action == MotionEvent.ACTION_UP){
myVibrator.cancel();
}
return true;
}});
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/buttonVibrate1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Vibrate for 500ms" />
<Button
android:id="@+id/buttonVibrate2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Touch to Vibrate (max. 1 sec.)" />
<Button
android:id="@+id/buttonVibrate3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Touch to Vibrate Pattern" />
</LinearLayout>
"android.permission.VIBRATE" is needed.
Porsche 911 (997) Targa 4S
B6 / 3.800 cc / 385 PS / 310 lb/ft (420 Nm) @ 4.400 / 0 - 62 mph (100 km/h): 4,9 s / 0 - 100 mph (160 km/h): 10,4 s / Vmax: 185 mph (297 km/h)
(click images for a larger view)
(click images for a larger view)
Program Android Vibrator
android.os.Vibrator operates the vibrator on the device.
Your code call getSystemService(AndroidVibratorActivity.VIBRATOR_SERVICE) to retrieve a Vibrator for interacting with the vibration hardware. In the example, touch on button1 to generate vibration for 500ms. Touch and hold on button2 to generate vibration for max 1 second, or release to stop.
You have to modify AndroidManifest.xml to add permission of "android.permission.VIBRATE".
Next:
- Vibrate with a given pattern
Your code call getSystemService(AndroidVibratorActivity.VIBRATOR_SERVICE) to retrieve a Vibrator for interacting with the vibration hardware. In the example, touch on button1 to generate vibration for 500ms. Touch and hold on button2 to generate vibration for max 1 second, or release to stop.
You have to modify AndroidManifest.xml to add permission of "android.permission.VIBRATE".
package com.exercise.AndroidVibrator;
import android.app.Activity;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
public class AndroidVibratorActivity extends Activity {
Button buttonVibrate1, buttonVibrate2;
Vibrator myVibrator;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
buttonVibrate1 = (Button)findViewById(R.id.buttonVibrate1);
buttonVibrate2 = (Button)findViewById(R.id.buttonVibrate2);
myVibrator = (Vibrator)getSystemService(AndroidVibratorActivity.VIBRATOR_SERVICE);
buttonVibrate1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myVibrator.vibrate(500);
}});
buttonVibrate2.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if(action == MotionEvent.ACTION_DOWN){
myVibrator.vibrate(1000);
}else if(action == MotionEvent.ACTION_UP){
myVibrator.cancel();
}
return true;
}});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<Button
android:id="@+id/buttonVibrate1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Vibrate for 500ms" />
<Button
android:id="@+id/buttonVibrate2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Touch to Vibrate (max. 1 sec.)" />
</LinearLayout>
Next:
- Vibrate with a given pattern
Jaguar Mk2 3,4
S6 / 3.442 cc / 213 PS / 215 ft/lb (291 Nm) @ 3.000 / Vmax: 120 mph (193 km/h)
(click images for a larger view)
(click images for a larger view)
3D rotate for RenderScript - rsMatrixRotate()
Refer to the RenderScript.rs in the example "Perform transform of Translate and Rotate on RenderScript", the rsMatrixRotate() function define the rotation.
void rsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z)
Modify RenderScript.rs of last exercise "Draw circle in Android RenderScript".
void rsMatrixRotate(rs_matrix4x4 *m, float rot, float x, float y, float z)
Modify RenderScript.rs of last exercise "Draw circle in Android RenderScript".
//declare RendorScript Version
#pragma version(1)
//declare package
#pragma rs java_package_name(com.exercise.AndroidRenderScript);
//include graphics library
#include "rs_graphics.rsh"
rs_mesh my_rs_mesh;
float rotation;
void init(){
rotation = 0.0f;
}
int root(){
//set background color
rsgClearColor(0.0f, 0.0f, 0.0f, 0.0f);
//Transform something
rs_matrix4x4 matrix;
rsMatrixLoadIdentity(&matrix);
rsMatrixTranslate(&matrix, 100.0f, 100.0f, 0.0f);
rsMatrixRotate(&matrix, rotation++, 1.0f, 1.0f, 1.0f);
rsgProgramVertexLoadModelMatrix(&matrix);
//draw something
rsgDrawMesh(my_rs_mesh);
//repeat 20ms
return 20;
}
Cadillac Ciel
V6 Hybrid / 3.564 cc / 430 PS / 430 ft/lb (583 Nm) / twin turbo / AWD
(click images for a larger view)
(click images for a larger view)
Datsun Fairlady 1600 Cabriolet
S4 / 1.595 cc / 97 PS / 104 ft/lb (141 Nm) @ 4.000 / Vmax: 106 mph (170 km/h)
(click images for a larger view)
(click images for a larger view)