[Android Q&A, Help & Troubleshooting] yetunthu.89:
Hello everyone I want to put my own textview or edittext in canvas1.java or canvasclass.java . Actually this coding are lipitk toolkit handwriting recognition android application. Please help me if possible.

/************************canvas1.java*********************/

package com.canvas;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStreamReader;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.Context;

import android.content.Intent;

import android.graphics.Color;

import android.graphics.Typeface;

import android.inputmethodservice.InputMethodService;

import android.opengl.Visibility;

import android.os.AsyncTask;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.os.Vibrator;

import android.speech.tts.TextToSpeech;

import android.speech.tts.TextToSpeech.OnInitListener;

import android.text.method.ScrollingMovementMethod;

import android.util.Log;

import android.view.Display;

import android.view.Gravity;

import android.view.KeyEvent;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import android.view.View.OnClickListener;

import android.view.View.OnLongClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.HorizontalScrollView;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ScrollView;

import android.widget.Scroller;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.LinearLayout.LayoutParams;

import com.google.tts.TTS;

public class Canvas1 extends Activity implements OnClickListener,OnLongClickListener{

private TTS myTts;

CanvasClass canClass;

private LinearLayout main;

private LinearLayout cenerLayout;

private LinearLayout topLayout;

private LinearLayout subLayout;

private LinearLayout tvLayout;

private LinearLayout SecondLayout;

private LinearLayout mylayout;

private ImageView Exit;

private ScrollView scrllView;

private HorizontalScrollView HorizontalSV;

private TextView[] TV=new TextView[1];

private TextView[] s=new TextView[1];

private TextView[] TViews=new TextView[5];

public final static int mButtonHeight = 220;

public final static int mButtonWidth = 80;

String inst[]=new String[5]; ;

String InstTemp;

int flag=0;

int c0flag=0;

int c1flag=0;

int c2flag=0;

int c3flag=0;

int SpaceSelFlag = 1;

String newStr="";

int height;

public static int width;

Vibrator v;

/** Called when the activity is first created. */

CanvasClass canvasClass = null;

Canvas1 conObj = null;

public final int MY_DATA_CHECK_CODE = 1;

private TextToSpeech mTts = null;

public ProgressDialog dialog;

[MENTION=439709]override[/MENTION]

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

width = display.getWidth();

height = display.getHeight();

v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

AssetInstaller assetInstaller = new AssetInstaller(getApplicationContext(), "projects");

try {

assetInstaller.execute();

} catch (IOException e) {

e.printStackTrace();

}

conObj = this;

canvasClass = new CanvasClass(this,conObj);

main = new LinearLayout(this);

main.setOrientation(LinearLayout.VERTICAL);

main.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.FILL_PARENT));

topLayout = new LinearLayout(this);

topLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

((height/2)+130)));

topLayout.setOrientation(LinearLayout.VERTICAL);

topLayout.setBackgroundColor(0xffffffcc);

topLayout.addView(canvasClass);

/*

mylayout = new LinearLayout(this);

mylayout.setOrientation(LinearLayout.VERTICAL);

mylayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT));

mylayout.setBackgroundColor(Color.WHITE);

for(int i = 0; i <s.length; i++) {

s = new EditText(this);

s.setTextColor(Color.RED);

s.setTextSize(40);

s.setGravity(Gravity.AXIS_Y_SHIFT);

s.setTypeface(null, Typeface.BOLD);

s.setHeight(height/8);

s.setPadding(5, 0, 0, 0);

s.setScroller(new Scroller(this));

s.setVerticalScrollBarEnabled(true);

s.setMovementMethod(ScrollingMovementMethod.getInstance());

mylayout.addView(s);

}

*/

cenerLayout = new LinearLayout(this);

cenerLayout.setOrientation(LinearLayout.VERTICAL);

cenerLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.WRAP_CONTENT));

cenerLayout.setBackgroundColor(Color.GREEN);

for(int i = 0; i <TV.length; i++) {

TV = new TextView(this);

TV.setTextColor(Color.RED);

TV.setTextSize(40);

TV.setGravity(Gravity.CENTER_HORIZONTAL);

TV.setTypeface(null, Typeface.BOLD);

TV.setHeight(height/8);

TV.setPadding(5, 0, 0, 0);

TV.setScroller(new Scroller(this));

TV.setVerticalScrollBarEnabled(true);

TV.setMovementMethod(ScrollingMovementMethod.getInstance());

cenerLayout.addView(TV);

}

SecondLayout = new LinearLayout(this);

SecondLayout.setOrientation(LinearLayout.VERTICAL);

SecondLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

70));

SecondLayout.setBackgroundColor(0xff26466D);

tvLayout = new LinearLayout(this);

tvLayout.setOrientation(LinearLayout.HORIZONTAL);

tvLayout.setLayoutParams(new LinearLayout.LayoutParams(

(width-20),

((height/8)-30)));

for(int i = 0; i < TViews.length; i++) {

TViews = new TextView(this);

TViews.setTextColor(Color.YELLOW);

TViews[0].setText("Suggested words..");

TViews[0].setTextColor(0xffE8E8E8);

TViews.setTextSize(15);

TViews.setGravity(Gravity.CENTER);

TViews.setPadding(10, 0, 0, 0);

TViews.setHeight(((height/8)-30));

TViews.setOnClickListener(this);

tvLayout.addView(TViews);

}

HorizontalSV=new HorizontalScrollView(this);

HorizontalSV.setLayoutParams(new LinearLayout.LayoutParams(

(width-125),

LinearLayout.LayoutParams.WRAP_CONTENT));

HorizontalSV.addView(tvLayout,new LayoutParams(LayoutParams.FILL_PARENT,

LayoutParams.FILL_PARENT));

SecondLayout.addView(HorizontalSV);

subLayout = new LinearLayout(this);

subLayout.setOrientation(LinearLayout.HORIZONTAL);

subLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

((height/8)-16)));

subLayout.setGravity(Gravity.BOTTOM);

Exit = new ImageView(this);

Exit.setImageResource(R.drawable.exit);

Exit.setPadding(30, 0, 0, 0);

Exit.setOnClickListener(this);

subLayout.addView(Exit);

main.addView(cenerLayout);

main.addView(topLayout);

main.addView(subLayout);

setContentView(main);

Intent checkIntent = new Intent();

checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);

startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);

}

protected void onActivityResult(

int requestCode, int resultCode, Intent data) {

if (requestCode == MY_DATA_CHECK_CODE) {

if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {

// success, create the TTS instance

mTts = new TextToSpeech(this, new OnInitListener() {

public void onInit(int status) {

// TODO Auto-generated method stub

//mTts.speak("Hello World", TextToSpeech.QUEUE_FLUSH, null);

}

});

} else {

// missing data, install it

Intent installIntent = new Intent();

installIntent.setAction(

TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);

startActivity(installIntent);

}

}

}

public void onClick(View v) {

if(v==Exit){

int pid = android.os.Process.myPid();

android.os.Process.killProcess(pid);

}

}

/* This method will handle the swipe across the edge. Calls Freepad once the

touch area reaches the right end of screen */

public void ClearCanvas(){

if(canvasClass != null){

topLayout.removeView(canvasClass);

canvasClass = new CanvasClass(this,conObj);

topLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

((height/2)+130)));

topLayout.addView(canvasClass);

}

}

class ProgressdialogClass extends AsyncTask<Void, Void, String> {

[MENTION=439709]override[/MENTION]

protected String doInBackground(Void... unsued) {

canvasClass.addStroke(canvasClass._currentStroke);

return null;

}

[MENTION=439709]override[/MENTION]

protected void onPostExecute(String sResponse) {

dialog.dismiss();

FreePadCall();

}

[MENTION=439709]override[/MENTION]

protected void onPreExecute(){

dialog = ProgressDialog.show(Canvas1.this, "Processing","Please wait...", true);

}

}

public void CallingMethod(){

ProgressdialogClass ObjAsy=new ProgressdialogClass();

ObjAsy.execute();

}

public void FreePadCall(){

HorizontalSV.setVisibility(View.VISIBLE);

if(canvasClass != null){

topLayout.removeView(canvasClass);

canvasClass.destroyDrawingCache();

canvasClass = new CanvasClass(this,conObj);

topLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

((height/2)+130)));

topLayout.addView(canvasClass);

}

TV[0].setText(canvasClass.character[0]);

String str1 = TV[0].getText().toString();

mTts.speak(str1, 0, null);

}

public boolean onLongClick(View v) {

System.out.println("-----long click------");

return true;

}

int curr_indx = 0;

public void SpeakOutChoices(){

if(canvasClass != null){

topLayout.removeView(canvasClass);

canvasClass = new CanvasClass(this,conObj);

topLayout.setLayoutParams(new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

((height/2)+130)));

topLayout.addView(canvasClass);

}

System.out.println("index"+curr_indx +"---"+ CanvasClass.StrokeResultCount);

if(curr_indx < CanvasClass.StrokeResultCount){

TV[0].setText(CanvasClass.character[curr_indx]);

String Choice1=CanvasClass.character[curr_indx];

mTts.speak(Choice1, 0, null);

curr_indx++;

if(curr_indx == CanvasClass.StrokeResultCount)

curr_indx = 0;

}

}

}

/***************Convasclass.java*******************/

package com.canvas;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.Timer;

import java.util.TimerTask;

import com.canvas.Canvas1.ProgressdialogClass;

import android.R.color;

import android.R.style;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.Point;

import android.graphics.PointF;

import android.graphics.PorterDuff;

import android.graphics.Rect;

import android.os.CountDownTimer;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.Display;

import android.view.KeyEvent;

import android.view.MotionEvent;

import android.view.WindowManager;

import android.view.View;

import android.view.View.OnTouchListener;

public class CanvasClass extends View implements OnTouchListener{

private LipiTKJNIInterface _lipitkInterface;

private LipiTKJNIInterface _recognizer;

private Page _page;

private PointF _lastSpot;

public Stroke _currentStroke;

private ArrayList<PointF> _currentStrokeStore;

private ArrayList<Stroke> _strokes;

private Stroke[] _recognitionStrokes;

private ArrayList<Symbol> _symbols;

public static String[] character;

public static int StrokeResultCount=0;

ArrayList<Values> vals = new ArrayList<Values>();

public static int min=480;

public static int max=0;

public static int minX=800;

public static int maxX=0;

public static int XCood=0;

private int mPosX;

private int mPosY;

private int mLastTouchX=0;

private int mLastTouchY=0;

boolean flag=true;

boolean flagbs=true;

public static boolean canvastest=true;

MyCount counter;

MyLongPressCount myLongPress;

BufferedWriter out;

Canvas1 canObj=null;

private static final String TAG = "DrawView";

public CanvasClass(Context context,Canvas1 canObjParam) {

super(context);

canObj=canObjParam;

globalvariable.paint=new Paint();

setFocusable(true);

setFocusableInTouchMode(true);

this.setOnTouchListener(this);

globalvariable.paint.setColor(Color.BLUE);

globalvariable.paint.setAntiAlias(true);

globalvariable.paint.setDither(true);

globalvariable.paint.setStyle(Paint.Style.STROKE);

globalvariable.paint.setStrokeJoin(Paint.Join.ROUND);

globalvariable.paint.setStrokeCap(Paint.Cap.ROUND);

globalvariable.paint.setStrokeWidth(5);

counter = new MyCount(700,1000);

myLongPress = new MyLongPressCount(3000,1000);

_currentStroke = new Stroke();

_strokes = new ArrayList<Stroke>();

_recognizer = null;

_symbols = new ArrayList<Symbol>();

// Initialize lipitk

Context contextlipi = getContext();

File externalFileDir = contextlipi.getExternalFilesDir(null);

String path = externalFileDir.getPath();

Log.d("JNI", "Path: " + path);

_lipitkInterface = new LipiTKJNIInterface(path, "SHAPEREC_ALPHANUM");

_lipitkInterface.initialize();

_page = new Page(_lipitkInterface);

_recognizer=_lipitkInterface;

}

public boolean onTouch(View view, MotionEvent event) {

Values vs=new Values();

final int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_DOWN: {

min=480;

max=0;

maxX=0;

minX=800;

counter.cancel();

myLongPress.start();

globalvariable.IsUserWriting=true;

vs.x = (int) event.getX();

vs.y = (int) event.getY();

float X= (float) vs.x;

float Y= (float) vs.y;

PointF p = new PointF(X, Y);

_lastSpot=p;

_currentStroke.addPoint(p);

if(vs.y>max)

max=vs.y;

if(vs.y<min)

min=vs.y;

if(vs.x>maxX)

maxX=vs.x;

if(vs.x<minX)

minX=vs.x;

XCood=vs.x;

globalvariable.strokeXY += "{" + vs.x + "," + vs.y + "}|";

vals.add(vs);

invalidate();

System.out.println("action down stroke values===");

break;

}

case MotionEvent.ACTION_MOVE: {

counter.cancel();

vs.x = (int) event.getX();

vs.y = (int) event.getY();

float X= (float) vs.x;

float Y= (float) vs.y;

PointF p = new PointF(X, Y);

_lastSpot=p;

_currentStroke.addPoint(p);

//myLongPress.cancel();

globalvariable.VSG=vs.x;

globalvariable.LongPressFlag=true;

globalvariable.strokeXY += "{" + vs.x + "," + vs.y + "}|";

vals.add(vs);

if(vs.y>max)

max=vs.y;

if(vs.y<min)

min=vs.y;

if(vs.x>maxX)

maxX=vs.x;

if(vs.x<minX)

minX=vs.x;

XCood=vs.x;

System.out.println("action move stroke values===");

invalidate();

break;

}

case MotionEvent.ACTION_UP:{

vs.x = (int) event.getX();

vs.y = (int) event.getY();

float X= (float) vs.x;

float Y= (float) vs.y;

PointF p = new PointF(X, Y);

_lastSpot=p;

_currentStroke.addPoint(p);

_currentStrokeStore = new ArrayList<PointF>();

_currentStrokeStore.add(p);

System.out.println("Max==="+max);

System.out.println("Min==="+min);

globalvariable.strokeXY += "N";

/* this condition should be checked only once for the first stroke after

a time out */

if(globalvariable.isFirststroke)

{

if((max-min) < 30 &&(max!=min))

{

globalvariable.IsUserWriting = false;

}

}

if(globalvariable.isFirststroke && globalvariable.IsUserWriting == false)

{

globalvariable.isFirststroke = true;

}

else

{

globalvariable.isFirststroke = false;

}

if(globalvariable.IsUserWriting)

{

counter.start();

}

else

{

if(XCood < 30)

{

//canObj.backspace();

}

else if(XCood > (canObj.width - 30))

{

canObj.SpeakOutChoices();

}

}

myLongPress.cancel();

System.out.println("action up stroke values===");

break;

}

}

return true;

}

public void addStroke(Stroke stroke) {

_strokes.add(stroke);

_recognitionStrokes = new Stroke[_strokes.size()];

for (int s = 0; s < _strokes.size(); s++)

_recognitionStrokes = _strokes.get(s);

LipitkResult[] results = _recognizer.recognize(_recognitionStrokes);

for (LipitkResult result : results) {

Log.e("jni", "ShapeID = " + result.Id + " Confidence = " + result.Confidence);

}

String configFileDirectory = _recognizer.getLipiDirectory() + "/projects/alphanumeric/config/";

character=new String[results.length];

for(int i=0;i<character.length;i++){

character = _recognizer.getSymbolName(results.Id, configFileDirectory);

}

StrokeResultCount=results.length;

_recognitionStrokes = null;

}

public void clearCanvas(){

System.out.println("====inside clearcanvas====");

canvasCpy.drawColor(Color.BLUE);

System.out.println("====over clearcanvas====");

}

public static Canvas canvasCpy = null;

int canvasWidth = 0;

int canvasHeight = 0;

private Bitmap bitmap;

[MENTION=439709]override[/MENTION]

protected void onDraw(Canvas canvas) {

canvasHeight=canvas.getHeight();

canvasWidth=canvas.getWidth();

for (Values values : vals) {

canvas.save();

canvas.drawPoint(values.x, values.y, globalvariable.paint);

canvas.restore();

mLastTouchX=values.x;

mLastTouchY=values.y;

}

File root = android.os.Environment.getExternalStorageDirectory();

File file = new File(root, "Freepad/points.txt");

if(!(file.isDirectory()))

{

return;

}

else

{

try {

out = new BufferedWriter(new FileWriter(file));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

out.write(globalvariable.strokeXY);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

try {

out.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

globalvariable.canvasvar=canvas;

System.out.println("stroke values:-------"+globalvariable.strokeXY);

System.out.println("stroke values:-------"+globalvariable.strokeXY.length());

}

}

public class MyCount extends CountDownTimer{

public MyCount(long millisInFuture, long countDownInterval) {

super(millisInFuture, countDownInterval);

}

[MENTION=439709]override[/MENTION]

public void onFinish() {

System.out.println("Timer Flag :: " + globalvariable.TimerFlag);

if(globalvariable.LongPressFlag){

canObj.CallingMethod();

globalvariable.IsUserWriting=false;

globalvariable.isFirststroke = true;

}

else{

}

}

[MENTION=439709]override[/MENTION]

public void onTick(long millisUntilFinished) {

System.out.println("Tick tick Flag :: " + globalvariable.TimerFlag);

}

}

public class MyLongPressCount extends CountDownTimer{

public MyLongPressCount(long millisInFuture, long countDownInterval) {

super(millisInFuture, countDownInterval);

}

[MENTION=439709]override[/MENTION]

public void onFinish() {

globalvariable.LongPressFlag=false;

System.out.println("Long press timer expiry: Timer Flag :: " + globalvariable.TimerFlag);

canObj.ClearCanvas();

}

[MENTION=439709]override[/MENTION]

public void onTick(long millisUntilFinished) {

System.out.println("Tick tick Flag :: " + globalvariable.TimerFlag);

}

}

}

class Values {

int x, y;

[MENTION=439709]override[/MENTION]

public String toString() {

return x + ", " + y;

}

}