One place for android professionals and hobyists. Get access to the latest news, tutorials, tips, FAQs on android development and information about great android apps.
Friday, December 30, 2011
Tuesday, November 8, 2011
Sunday, November 6, 2011
Sunday, October 23, 2011
Saturday, October 15, 2011
Friday, October 7, 2011
Thursday, September 22, 2011
Friday, September 9, 2011
Wednesday, August 31, 2011
Islam & Android: A Fusion of Technology & Theology
Religion plays a pivotal role in the way how people think, behave and lead their day to day lives. Islam is no doubt the fastest growing religion in the United States and the 2nd largest religion in the world. With the advent of smartphones, a modern Muslim can always be at ease to perform their prayers, and other religious practices. There are a number of Android apps on the market that are a great mentor for Muslims, a few of which i would like to mention here:
Islamic Prayer Times. An Android app with azan and prayer time alarms.
Quran Android. This app provides the text of the Quran in Arabic along with translations in a number of languages.
Muslims Pro. For Android phones, this app has an Islamic calendar, qibla direction and Julian dates of Islamic holidays, in addition to the Quran in Arabic and Roman English text along with an English translation.
Friday, August 12, 2011
Friday, July 22, 2011
Monday, June 27, 2011
Tuesday, June 21, 2011
Things That Cannot Change by Dianne Hackborn
Sometimes a developer will make a change to an application that has surprising results when installed as an update to a previous version — shortcuts break, widgets disappear, or it can’t even be installed at all. There are certain parts of an application that are immutable once you publish it, and you can avoid surprises by understanding them.
For more information read Dianne Hacborn's article at:
http://android-developers.blogspot.com/index.html
For more information read Dianne Hacborn's article at:
http://android-developers.blogspot.com/index.html
Friday, June 17, 2011
Sunday, June 12, 2011
Android-er: Pro Android 3
Wednesday, June 1, 2011
Tuesday, May 10, 2011
Tuesday, May 3, 2011
Wednesday, April 13, 2011
Thursday, March 31, 2011
Wednesday, March 30, 2011
Monday, March 28, 2011
Thursday, March 17, 2011
Tutorial: Using Google Translate API In Android
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Translator.java:
package com.myapps.translate;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
public class Translator extends Activity {
/** Called when the activity is first created. */
String translatedText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
Translate t = new Translate();
try {
translatedText = t.execute("Bonjour le monde", Language.FRENCH, Language.ENGLISH);
//tv.setText(translatedText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(this, translatedText, Toast.LENGTH_SHORT).show();
tv.setText(translatedText);
setContentView(tv);
}
}
Note: Download google-api-translate-java-0.95.jar from http://code.google.com/p/google-api-translate-java/downloads/list and import it as an external jar file. (Right-click project->Properties->Java Build Path-> Libraries->Add External JARS...).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Translator.java:
package com.myapps.translate;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
public class Translator extends Activity {
/** Called when the activity is first created. */
String translatedText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
Translate t = new Translate();
try {
translatedText = t.execute("Bonjour le monde", Language.FRENCH, Language.ENGLISH);
//tv.setText(translatedText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(this, translatedText, Toast.LENGTH_SHORT).show();
tv.setText(translatedText);
setContentView(tv);
}
}
Note: Download google-api-translate-java-0.95.jar from http://code.google.com/p/google-api-translate-java/downloads/list and import it as an external jar file. (Right-click project->Properties->Java Build Path-> Libraries->Add External JARS...).
Monday, March 14, 2011
Source Code To Display Battery Info & Chart
Following code displays battery-related details on Android phones. I programmed it on Android 1.6. The code still needs some refinement though. And the following code is inspired and extracted from the android sample code for drawings and shapes.
Visitors and members of the blog are warmly welcomed to play with it and refine it further.
ShapeDrawable1.java
package com.myapps.batterystatus;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.ArcShape;
import android.graphics.drawable.shapes.OvalShape;
import android.graphics.drawable.shapes.PathShape;
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.RoundRectShape;
import android.graphics.drawable.shapes.Shape;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ShapeDrawable1 extends GraphicsActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
setContentView(new SampleView(this));
//startActivity(new Intent(ShapeDrawable1.this,ShapeDrawable1.class));
}
private static class SampleView extends View {
private ShapeDrawable[] mDrawables;
private TextView tv;
private static Shader makeSweep() {
return new SweepGradient(150, 50,
new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 },
null);
}
private static Shader makeLinear() {
return new LinearGradient(0, 0, 100, 100,
new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF },
null, Shader.TileMode.REPEAT);
}
private static Shader makeTiling() {
int[] pixels = new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0};
Bitmap bm = Bitmap.createBitmap(pixels, 2, 2,
Bitmap.Config.ARGB_8888);
return new BitmapShader(bm, Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
}
private static class MyShapeDrawable extends ShapeDrawable {
private Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public MyShapeDrawable(Shape s) {
super(s);
mStrokePaint.setStyle(Paint.Style.STROKE);
}
public Paint getStrokePaint() {
return mStrokePaint;
}
@Override protected void onDraw(Shape s, Canvas c, Paint p) {
s.draw(c, p);
s.draw(c, mStrokePaint);
}
private void setText(String s)
{
this.setText(s);
}
private String getText()
{
return this.getText();
}
}
public SampleView(Context context) {
super(context);
setFocusable(true);
float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 };
RectF inset = new RectF(6, 6, 6, 6);
float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 };
Path path = new Path();
path.moveTo(50, 0);
path.lineTo(0, 50);
path.lineTo(50, 100);
path.lineTo(100, 50);
path.close();
mDrawables = new ShapeDrawable[8];
mDrawables[0] = new ShapeDrawable(new RectShape());
mDrawables[1] = new ShapeDrawable(new OvalShape());
mDrawables[2] = new ShapeDrawable(new RoundRectShape(outerR, null,
null));
mDrawables[3] = new ShapeDrawable(new RoundRectShape(outerR, inset,
null));
mDrawables[4] = new ShapeDrawable(new RoundRectShape(outerR, inset,
innerR));
mDrawables[5] = new ShapeDrawable(new PathShape(path, 100, 100));
//Complete circle
mDrawables[6] = new MyShapeDrawable(new ArcShape(0, -365));
//Setting percentage
mDrawables[7] = new MyShapeDrawable(new ArcShape(0, BatteryLevel.perc * 365/100));
mDrawables[0].getPaint().setColor(0xFFFF0000);
mDrawables[1].getPaint().setColor(0xFF00FF00);
mDrawables[2].getPaint().setColor(0xFF0000FF);
mDrawables[3].getPaint().setShader(makeSweep());
mDrawables[4].getPaint().setShader(makeLinear());
mDrawables[5].getPaint().setShader(makeTiling());
mDrawables[6].getPaint().setColor(0xFF0000FF);
mDrawables[7].getPaint().setColor(0xFF00FF00);
PathEffect pe = new DiscretePathEffect(10, 4);
PathEffect pe2 = new CornerPathEffect(4);
mDrawables[3].getPaint().setPathEffect(
new ComposePathEffect(pe2, pe));
MyShapeDrawable msd = (MyShapeDrawable)mDrawables[6];
msd.getStrokePaint().setStrokeWidth(4);
}
@Override protected void onDraw(Canvas canvas) {
int x = 10;
int y = 10;
int width = 400;
int height = 800;
/* for (Drawable dr : mDrawables) {
dr.setBounds(x, y, x + width, y + height);
dr.draw(canvas);
y += height + 5;
}*/
/*
mDrawables[7] = new MyShapeDrawable(new ArcShape(0, -300));
mDrawables[7].getPaint().setColor(0xFF00FF00);
mDrawables[7].setBounds(x, y, 150, 150);
mDrawables[7].draw(canvas);
y += height + 5;
*/
//setting width and height and location of Pie Chart
mDrawables[6].setBounds(x, 70, 120, 170);
mDrawables[6].draw(canvas);
y += height + 5;
mDrawables[7].setBounds(x, 70, 120, 170);
mDrawables[7].draw(canvas);
y += height + 5;
}
}
}
PictureLayout.java
package com.myapps.batterystatus;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
public class PictureLayout extends ViewGroup {
private final Picture mPicture = new Picture();
public PictureLayout(Context context) {
super(context);
}
public PictureLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void addView(View child) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child);
}
@Override
public void addView(View child, int index) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child, index);
}
@Override
public void addView(View child, LayoutParams params) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child, params);
}
@Override
public void addView(View child, int index, LayoutParams params) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child, index, params);
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int count = getChildCount();
int maxHeight = 480;
int maxWidth = 320;
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
measureChild(child, widthMeasureSpec, heightMeasureSpec);
}
}
maxWidth += getPaddingLeft() + getPaddingRight();
maxHeight += getPaddingTop() + getPaddingBottom();
Drawable drawable = getBackground();
if (drawable != null) {
maxHeight = Math.max(maxHeight, drawable.getMinimumHeight());
maxWidth = Math.max(maxWidth, drawable.getMinimumWidth());
}
setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),
resolveSize(maxHeight, heightMeasureSpec));
}
private void drawPict(Canvas canvas, int x, int y, int w, int h,
float sx, float sy) {
canvas.save();
canvas.translate(x, y);
canvas.clipRect(0, 0, w, h);
canvas.scale(1.5f, 1.5f);
canvas.scale(sx, sy, w, h);
canvas.drawPicture(mPicture);
canvas.restore();
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(mPicture.beginRecording(getWidth(), getHeight()));
mPicture.endRecording();
int x = getWidth()/2;
int y = getHeight()/2;
if (false) {
canvas.drawPicture(mPicture);
} else {
drawPict(canvas, 0, 0, x*10, y*10, 1, 1);
//drawPict(canvas, x, 0, x, y, -1, 1);
//drawPict(canvas, 0, y, x, y, 1, -1);
//drawPict(canvas, x, y, x, y, -1, -1);
}
}
@Override
public ViewParent invalidateChildInParent(int[] location, Rect dirty) {
location[0] = getLeft();
location[1] = getTop();
dirty.set(100, 100, getWidth(), getHeight());
return getParent();
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int count = super.getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
final int childLeft = getPaddingLeft();
final int childTop = getPaddingTop();
child.layout(childLeft, childTop,
childLeft + child.getMeasuredWidth(),
childTop + child.getMeasuredHeight());
}
}
}
}
GraphicsActivity.java
package com.myapps.batterystatus;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
//@SuppressWarnings("deprecation")
class GraphicsActivity extends Activity {
TextView tv;
String strChargingStatus="";
TextView tvChargingStatus;
TextView tvVoltage;
TextView tvTemp;
TextView tvHealth;
TextView tvTech;
LinearLayout layout;
ImageView iv;
public final int delay = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layout = new LinearLayout(this);
layout.setBackgroundResource(R.drawable.inner);
BatteryLevel BatLvl = new BatteryLevel();
//iv = new ImageView(this);
//iv.setBackgroundResource(R.drawable.inner);
//iv.setImageResource(R.drawable.inner);
tv = new TextView(this);
tv.setText("percentage");
//Toast.makeText(this, "testing", Toast.LENGTH_SHORT).show();
tvChargingStatus = new TextView(this);
tvChargingStatus.setTextSize(10);
tvChargingStatus.setText(BatteryLevel.chargingStatus);
tvChargingStatus.setTextColor(Color.BLACK);
tvChargingStatus.setPadding(50, 175, 0, 0);
tvVoltage = new TextView(this);
tvVoltage.setText("Voltage: " + BatteryLevel.batteryVol);
tvVoltage.setTextSize(10);
tvVoltage.setTextColor(Color.BLACK);
tvVoltage.setPadding(10, 220,0,0);
tvTemp = new TextView(this);
tvTemp.setText("Temperature: " + BatteryLevel.batteryTemp);
tvTemp.setTextSize(10);
tvTemp.setTextColor(Color.BLACK);
tvTemp.setPadding(10, 240,0,0);
tvHealth = new TextView(this);
tvHealth.setText("Health: " + BatteryLevel.batteryHealth);
tvHealth.setTextSize(10);
tvHealth.setTextColor(Color.BLACK);
tvHealth.setPadding(127, 220,0,0);
//setContentView(tv);
tvTech = new TextView(this);
tvTech.setText("Technology: " + BatteryLevel.batteryTech);
tvTech.setTextSize(10);
tvTech.setTextColor(Color.BLACK);
tvTech.setPadding(127, 240,0,0);
}
@Override
public void setContentView(View view) {
tv = new TextView(this);
tv.setTextSize(40);
tv.setTextColor(Color.BLACK);
//tv.setPadding(0, 0, 10, 10);
tv.setText("\n\n " + BatteryLevel.batteryLevel);
if (true) { // set to true to test Picture
ViewGroup vg = new PictureLayout(this);
//vg.addView(iv);
vg.addView(layout);
vg.addView(tv);
//vg.addView(tvChargingStatus);
vg.addView(tvVoltage);
vg.addView(tvTemp);
vg.addView(tvHealth);
vg.addView(tvTech);
vg.addView(view);
//vg.addView(R.layout.main);
view = vg;
}
super.setContentView(view);
//this.startActivity(new Intent(GraphicsActivity.this,GraphicsActivity.class));
}
}
BatteryLevel.java
package com.myapps.batterystatus;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.widget.Toast;
public class BatteryLevel extends Activity {
private TextView tvBatteryLevel;
private TextView tvBatteryTemp;
private TextView tvBatteryVol;
private TextView tvBatteryHealth;
private TextView tvBatteryTech;
private TextView tvChargingStatus;
public static String chargingStatus;
public static String batteryTemp;
public static String batteryVol;
public static String batteryHealth;
public static String batteryLevel;
public static int perc;
public static String batteryTech;
public final int delay = 2500;
private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
/*Calculating Battery Power*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryLevel.setText("Battery level: "
+ String.valueOf(level * 100 / scale) + "%");
perc = level * 100 / scale;
batteryLevel = String.valueOf(level * 100 / scale) + "%";
}
/*Calculating Battery Temperature*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
int tempLevel = intent.getIntExtra("temperature", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryTemp.setText("Battery temperature: "
+ String.valueOf(tempLevel * 10 / scale) + " C");
batteryTemp = String.valueOf(tempLevel * 10 / scale) + " C";
}
/*Calculating Battery Voltage*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
int volLevel = intent.getIntExtra("voltage", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryVol.setText("Battery voltage: "
+ String.valueOf(volLevel * 100/scale) + " mV");
batteryVol = String.valueOf(volLevel * 100/scale) + " mV";
}
/*Calculating Battery Health*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
int healthLvl;
String healthStatus="";
int healthLevel = intent.getIntExtra("health", 0);
int scale = intent.getIntExtra("scale", 100);
healthLvl = healthLevel * 100/scale;
switch (healthLvl)
{
case 4:
healthStatus = "Bad";
break;
case 2:
healthStatus = "Good";
break;
case 1:
healthStatus = "Dead";
break;
}
tvBatteryHealth.setText("Battery health: "
+ healthStatus);
batteryHealth = healthStatus;
}
/*Retrieving Battery Technology*/
String batteryTechnology = intent.getStringExtra("technology");
tvBatteryTech.setText("Technology:" + batteryTechnology);
batteryTech = batteryTechnology;
/*Retrieving Battery Charging Status*/
int deviceChargingStatus = intent.getIntExtra("plugged" , 0);
if (deviceChargingStatus == 0)
{
tvChargingStatus.setText("Charging Status: Not Charging");
}
else
{
tvChargingStatus.setText("Charging Status: Charging");
}
chargingStatus = (String) tvChargingStatus.getText();
//Toast.makeText(BatteryLevel.this, tvChargingStatus.getText(), Toast.LENGTH_SHORT).show();
}
};
@Override
public void onResume() {
super.onResume();
registerReceiver(mBatteryInfoReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(mBatteryInfoReceiver);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvBatteryLevel = (TextView) findViewById(R.id.tvBatteryLevel);
tvBatteryTemp = (TextView) findViewById(R.id.tvBatteryTemp);
tvBatteryVol = (TextView) findViewById(R.id.tvBatteryVol);
tvBatteryHealth = (TextView) findViewById(R.id.tvBatteryHealth);
tvBatteryTech = (TextView) findViewById (R.id.tvBatteryTech);
tvChargingStatus = (TextView)findViewById(R.id.tvChargingStatus);
new Handler().postDelayed(new Runnable(){
public void run(){
startActivity(new Intent(BatteryLevel.this, ShapeDrawable1.class));
//Splash.this.finish();
}
}, delay);
}
}
Thursday, March 3, 2011
Wednesday, March 2, 2011
Saturday, February 26, 2011
The Innovative Apps On Google Android
http://www.googlelabs.com/?tags=android
Friday, February 25, 2011
Wednesday, February 23, 2011
Tuesday, February 22, 2011
Tuesday, February 15, 2011
Tuesday, February 8, 2011
Android Development In Visual Studio
Introduction
vs-android is intended to provide a collection of scripts and utilities to support integrated development of Android NDK C/C++ software under Microsoft Visual Studio.
Currently vs-android only works under Visual Studio 2010. Earlier versions lack the MSBuild integration with the C/C++ compilation systems.
The only required component is the Android NDK. Neither Cygwin, Java, nor the full Android SDK are needed to compile and link C/C++ code.
Features
- Compile and link Android C/C++ projects within Visual Studio.
- Integrated development, no makefiles. Works as another 'Platform' type.
- Android settings co-exist within the same VS projects as other platforms.
- Supports static library projects, and links them in if marked as project dependencies.
- Intellisense and 'External Dependencies' correctly pull in Android NDK headers.
- Cygwin install is not required.
- Around twice as fast as using ndk-build under Cygwin. For full rebuilds, and incremental changes.
- Ctrl-F7: compile single file functions, has no dependency checking wait.
- Supports invoking ant after linking, such that you end up with a packaged ready-to-deploy .apk file.
To download the latest version click here
Saturday, February 5, 2011
Saturday, January 29, 2011
Tutorial: Android & Mind Games
Developing a game on android is a whole new ball game i.e. very different from making database apps. You have to know the logic behind every move. The flow of the program is complex and you also have to keep in mind about the memory issues if necessary.
Mind games are great mind-teasers as well as thrilling to the general smartphone users. Ever wondered what are the essentials that a typical mind game program is comprised of?
We usually have the following: Random Numbers, Timer, and MotionEvent.
Here is a source code for a little game on Android that i named "Reflexo", as it measures one's reflexes :)
main.xml
reflexo.java:
Mind games are great mind-teasers as well as thrilling to the general smartphone users. Ever wondered what are the essentials that a typical mind game program is comprised of?
We usually have the following: Random Numbers, Timer, and MotionEvent.
Here is a source code for a little game on Android that i named "Reflexo", as it measures one's reflexes :)
main.xml
reflexo.java:
package com.games.reflexo;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
public class Reflexo extends Activity {
/** Called when the activity is first created. */
int score = 0;
int left = 0;
int top = 0;
int right = 0;
int bottom = 0;
Button startGame;
ImageView imgView;
TextView scoreDisplay;
MyCount counter;
int length = 10000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startGame = (Button)findViewById(R.id.start);
imgView = (ImageView)findViewById(R.id.img);
scoreDisplay = (TextView)findViewById(R.id.score);
startGame.setOnClickListener(new View.OnClickListener(){
public void onClick(View v)
{
startGame.setVisibility(0);
counter.start();
}
});
imgView.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v,MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN)
{
score++;
}
return true;
}});
counter = new MyCount(length, 300);
}
public class MyCount extends CountDownTimer
{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
public void onFinish() {
scoreDisplay.setVisibility(1);
scoreDisplay.setText("Score:" + score);
}
public void onTick(long millisUntilFinished) {
Random randomNum = new Random();
left = randomNum.nextInt(200);
top = randomNum.nextInt(400);
right = randomNum.nextInt(200);
bottom = randomNum.nextInt(400);
if (millisUntilFinished / 100 % 2 == 0)
{
imgView.setPadding(left, top, right, bottom);
imgView.setVisibility(View.VISIBLE);
}
else
{
imgView.setVisibility(View.INVISIBLE);
}
}
}
}
Subscribe to:
Posts (Atom)