How’s it going guys. What I’m trying to do right now is increment this canvas text I have on the screen right now. I have a bitmap on the canvas that should will increment the number every time it is clicked. I printed the variable to the logcat and it is indeed incrementing but it’s not being drawn on the screen.
Here’s a picture of what I have now for better idea:

Here’s my drawing class:
package com.example.touchperson;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.Log;
import android.view.View;
public class Drawing extends View {
Bitmap robot;
Rect rec;
Paint text;
static int touchCount = 0;
public Drawing(Context context) {
super(context);
robot = BitmapFactory.decodeResource(getResources(), R.drawable.character);
Log.i("Robot coord", Integer.toString(robot.getHeight()));;
rec = new Rect(0, 0, 200 , 200);
text = new Paint();
text.setColor(Color.CYAN);
text.setTextSize(100);
}
public boolean contains(int x, int y){
if(rec.contains(x, y)){
return true;
}
else{
return false;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(robot, rec, rec, null);
canvas.drawText(Integer.toString(touchCount) ,(int) (canvas.getWidth()/2) , (int) (canvas.getHeight()/2), text);
}
}
Here’s my main activity class:
package com.example.touchperson;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class MainActivity extends Activity implements OnTouchListener {
Drawing view;
Drawing count;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = new Drawing(this);
view.setOnTouchListener(this);
setContentView(view);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
if(view.contains((int) event.getX(), (int) event.getY())){
Drawing.touchCount++;
count = new Drawing(this);
Log.i("touched", Integer.toString(Drawing.touchCount));
}
break;
}
return false;
}
}
Any help would be much appreciated.
You should add an update method to your Drawing class and then update the number you paint in that method. You probably also need to invalidate the region your Drawing class has painted to have the new number appear on the screen (to force your onDraw to be called again).
Like Squonk said, you have 2 instances of your Drawing class right now, and one is in the layout of the screen at all (only “view” is).
Aside from this though, I would add an ImageButton to show the robot, and then a TextView to show the number and add those elements to the layout of the activity. When the ImageButton is clicked, then I’d simply set the Text property of the TextView to the next number. Writing a customized View object is only required when you are rendering something that you can’t compose from the out-of-the-box components.