package Kids.LetterLearn;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Canvas.EdgeType;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Region;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AbsoluteLayout;
import android.widget.AbsoluteLayout.LayoutParams;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import android.widget.ViewFlipper;
public class KidsLetterLearnActivity extends Activity {
/** Called when the activity is first created. */
// Paint mPaint;
float Mx1,My1;
float x,y;
int j=0;
int wid=320,ht=480;
private float mX=200, mY=200;
private static final float TOUCH_TOLERANCE = 1;
float[] xdim={214,293,293,214,130,130,214};
float[] ydim={92,136,222,265,222,136,92};
//MyView mview;
ImageView iv,iv1,iv2;
// ViewFlipper vf;
RelativeLayout rl;
Paint mPaint = new Paint();
private static final float MINP = 0.25f;
private static final float MAXP = 0.75f;
Boolean resetPath=false;
Bitmap mBitmap;
Canvas mCanvas;
Path mPath1,mPath2,path;
Paint mBitmapPaint;
Region r;
//MyView mview;
Context c;
ViewFlipper vf;
Rect e;
View vs;
float mPosX=105;
float mPosY=70;
Drawable mImage;
float mScaleFactor = 1.f;
AbsoluteLayout aLayout;
int status=0;
MyViews mview;
Boolean halfpath=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try{
setContentView(R.layout.main);
aLayout= (AbsoluteLayout)findViewById(R.id.absLayout);
mview=new MyViews(this,null);
iv1=(ImageView)findViewById(R.id.imageView1);
iv1.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
status=1;
return false;
}
});
iv2=(ImageView)findViewById(R.id.imageView2);
iv2.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
status=2;
return false;
}
});
aLayout.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(status==1){
LayoutParams lp= new LayoutParams(25,25,(int)event.getX()-iv1.getWidth(),(int)event.getY()-iv1.getHeight());
if(r.contains(lp.x,lp.y)){
iv1.setLayoutParams(lp);
mview.touch_move(lp.x+3,lp.y+3);
}
if(( mX+1>=130 && mX+1<=170)&&(mY+1>=200 && mY+1<=240)){
iv1.setVisibility(8);
iv2.setVisibility(0);
}
}else if(status==2){
LayoutParams lp= new LayoutParams(25,25,(int)event.getX()-iv1.getWidth(),(int)event.getY()-iv1.getHeight());
if(r.contains(lp.x,lp.y)){
iv2.setLayoutParams(lp);
mview.touch_move(lp.x+3,lp.y+3);
Log.e("second", "hi");
}
if((mX+1>=215 && mX+1<=220)){
Toast.makeText(KidsLetterLearnActivity.this,"Complete",Toast.LENGTH_SHORT).show();
iv2.setVisibility(8);
}
}
if(event.getAction()==MotionEvent.ACTION_UP){
status=0;
}
return true;
}
});
aLayout.addView(mview);
}catch(Exception e){
Log.e("err",e.toString());
}
}
public class MyViews extends View {
RectF cr;
Path mpath;
Boolean hp=false;
float degree=0;
Bitmap mBitmaps;
public MyViews(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mPath1 = new Path();
mPath2 = new Path();
path=new Path();
c=context;
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
mBitmaps = BitmapFactory.decodeResource(getResources(), R.drawable.one);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(5);
r=new Region();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
}
public void clear()
{
mCanvas.drawColor(Color.BLACK);
mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
mCanvas.drawPaint(mPaint);
path.reset();
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
//canvas.save(Flag.MATRIX_SAVE_FLAG);
mPaint.setColor(Color.WHITE);
mPath1.moveTo(130, 100);
mPath1.lineTo(170, 100);
mPath1.lineTo(170, 200);
mPath1.lineTo(130, 200);
mPath1.lineTo(130, 100);
mPath2.moveTo(130, 200);
mPath2.lineTo(220, 200);
mPath2.lineTo(220, 240);
mPath2.lineTo(130, 240);
mPath2.lineTo(130, 200);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath1, mPaint);
canvas.drawPath(mPath2, mPaint);
if(iv1.getVisibility()==8){
mPath1.reset();
r=new Region();
r.setPath(mPath2, new Region(0,0,320,480));
mCanvas.clipRegion(r);
// invalidate();
}else{
r.setPath(mPath1, new Region(0,0,320,480));
mCanvas.clipRegion(r);
}
mPaint.setStrokeWidth(10);
// canvas.restore();
}
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
// mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mPaint.setColor(Color.RED);
mX = x;
mY = y;
//mCanvas.save();
// if(hp==false){
if(r.contains((int)x, (int)y)){
// mCanvas.save();
path.lineTo(mX, mY);
mCanvas.drawPath(path, mPaint);
// mCanvas.restore();
Log.e("hi","123");
invalidate();
}else{
if(iv1.getVisibility()==0){
onCreate(null);
invalidate();
}else{
path.reset();
invalidate();
}
}
//mCanvas.restore();
}
}
public boolean onTouchEvent(View v,MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(x, y);
Log.e("pos",""+x+" "+y);
invalidate();
break;
case MotionEvent.ACTION_MOVE:
{
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
// mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
mPaint.setColor(Color.RED);
mX = x;
mY = y;
mCanvas.save();
mCanvas.clipPath(mPath1);
if(r.contains((int)x, (int)y)){
path.lineTo(mX, mY);
mCanvas.drawPath(path, mPaint);
mPosX=mX-30;
mPosY=mY-30;
mCanvas.restore();
}else{
try{
if(hp==false){
onCreate(null);
mPosX=105;
mPosY=70;
}else{
path.lineTo(mX, mY);
mCanvas.drawPath(path, mPaint);
mPosX=mX-30;
mPosY=mY-30;
mCanvas.restore();
}
}catch(Exception e){
Log.e("OR", e.toString());
}
Log.e("OR", ""+x+" "+y);
}
}
invalidate();
} break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}
}Add a code snippet to your website: www.paste.org