انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رسم با انگشت و مشکل undo

رسم با انگشت و مشکل undo

#1
کد پی‌اچ‌پی:
public class DrawView extends View implements OnTouchListener {
 
   private Canvas  mCanvas;
 
   private Path    mPath;
 
   private Paint       mPaint  
    public ArrayList
<Pathpaths = new ArrayList<Path>();
 
   public ArrayList<PathundonePaths = new ArrayList<Path>(); 

    public 
DrawView(Context context
 
   {
 
       super(context);
 
       setFocusable(true);
 
       setFocusableInTouchMode(true);      
        this
.setOnTouchListener(this);
 
       mPaint = new Paint();
 
       mPaint.setAntiAlias(true);
 
       mPaint.setDither(true);
 
       mPaint.setColor(0xFFFFFFFF);
 
       mPaint.setStyle(Paint.Style.STROKE);
 
       mPaint.setStrokeJoin(Paint.Join.ROUND);
 
       mPaint.setStrokeCap(Paint.Cap.ROUND);
 
       mPaint.setStrokeWidth(6);
 
       mCanvas = new Canvas();
 
       mPath = new Path();

 
       //im=BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher);


 
                 
        
@Override
        protected void onSizeChanged
(int wint hint oldwint oldh) {
 
           super.onSizeChanged(wholdwoldh);
 
       }

 
       @Override
        protected void onDraw
(Canvas canvas) {
 
           //mPath = new Path();
 
           //canvas.drawPath(mPath, mPaint);

 
           for (Path p paths){
 
               canvas.drawPath(pmPaint);
 
           }
 
           canvas.drawPath(mPathmPaint);

 
       }

 
       private float mXmY;
 
       private static final float TOUCH_TOLERANCE 4;

 
       private void touch_start(float xfloat y) {
 
           undonePaths.clear();
 
           mPath.reset();
 
           mPath.moveTo(xy);
 
           mX x;
 
           mY y;
 
       }
 
       private void touch_move(float xfloat y) {
 
           float dx Math.abs(mX);
 
           float dy Math.abs(mY);
 
           if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
 
               mPath.quadTo(mXmY, (mX)/2, (mY)/2);
 
               mX x;
 
               mY y;
 
           }
 
       }
 
       private void touch_up() {
 
           mPath.lineTo(mXmY);
 
           // commit the path to our offscreen
 
           mCanvas.drawPath(mPathmPaint);
 
           // kill this so we don't double draw
 
           paths.add(mPath);
 
           
            mPath 
= new Path();            

        
}

 
       public void onClickUndo () { 
 
           if (paths.size()>0
 
           
 
              undonePaths.add(paths.remove(paths.size()-1));
 
              invalidate();
 
            }
 
           else
            
{
 
           }
 
      
             
//toast the user 
 
       }

 
       public void onClickRedo (){
 
           
           
if (undonePaths.size()>0
 
          
 
              paths.add(undonePaths.remove(undonePaths.size()-1)); 
 
              invalidate();
 
          
 
          else 
 
          {
 
   
           
}
 
            //toast the user 
 
       }


    @
Override
    public boolean onTouch
(View arg0MotionEvent event) {
 
         float x event.getX();
 
         float y event.getY();

 
         switch (event.getAction()) {
 
             case MotionEvent.ACTION_DOWN:
 
                 touch_start(xy);
 
                 invalidate();
 
                 break;
 
             case MotionEvent.ACTION_MOVE:
 
                 touch_move(xy);
 
                 invalidate();
 
                 break;
 
             case MotionEvent.ACTION_UP:
 
                 touch_up();
 
                 invalidate();
 
                 break;
 
         }
 
         return true;
 
   }

کلاس بالا برای رسم روی یک view بوسیله انگشت درست شده و قشنگ هم کار میکنه حتی undo  و redo هم انجام میده فقط یک مشکل کوچک داره اولین رسم که انجام میشه رو undo نمیکنه یعنی صدبار هم رسم کنید می تونید همه رو undo کنید ولی وقتی به اولین رسم (آخرین undo) میرسه کار نمیکنه. ظاهر کد درسته با Log هم چک کردم ظاهرا undo داره انجام میشه ولی رسم از روی صفحه پاک نمیشه. واقعا گیچ شدم Confused
پاسخ

رسم با انگشت و مشکل undo

#2
الان با یک اندروید 4.4 تست کردم مشکلی نداشت ولی با اندروید 5 (نوت3) همون مشکل رو داره!!!
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان