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