Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中使用动画绘制视图?_Android_View_Android Animation - Fatal编程技术网

如何在android中使用动画绘制视图?

如何在android中使用动画绘制视图?,android,view,android-animation,Android,View,Android Animation,我想画像这样的动画图像视图。首先,我想画圆,然后眼睛,然后嘴(拱状视图)与平滑动画。我们能实现这样的动画吗。在这里,我得到的问题,定位视图眼睛和弧形嘴 请试试这个 >AnimView.java import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import and

我想画像这样的动画图像视图。首先,我想画圆,然后眼睛,然后嘴(拱状视图)与平滑动画。我们能实现这样的动画吗。在这里,我得到的问题,定位视图眼睛和弧形嘴

请试试这个

>AnimView.java

   import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.RectF;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.SurfaceHolder.Callback;

    public class AnimView  extends  SurfaceView implements Runnable,
    Callback  {

        Paint paint = new Paint();
        Thread thread = null;
        SurfaceHolder surfaceHolder;
        boolean running=false;
        long time=0;

        int pos=0;

        public AnimView(Context context) {
            super(context);
            paint.setColor(Color.GREEN);
            surfaceHolder = getHolder();
        }


        public AnimView(Activity context) {
            // TODO Auto-generated constructor stub
            super(context);
            paint.setColor(Color.GREEN);
            surfaceHolder = getHolder();
        }


        public void onResumeMySurfaceView() {

            thread = new Thread(AnimView.this);
            thread.start();
            running=true;


        }

        public void onPauseMySurfaceView() {
            boolean retry = true;
            running = false;
            while (retry) {
                try {
                    thread.join();
                    retry = false;
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                //  e.printStackTrace();
                }
            }
        }

    //  @Override
    //    public void onDraw(Canvas canvas) {
    //            canvas.drawLine(0, 0, 20, 20, paint);
    //            canvas.drawLine(20, 0, 0, 20, paint);
    //            Log.i("onDraw","Draw");
    //         
    //    }

        @Override
        public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void surfaceCreated(SurfaceHolder arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void run() {
            // TODO Auto-generated method stub

            while(running)
            {
                if(time==0)
                {
                    time=System.currentTimeMillis();
                    pos=0;
                }
                if((System.currentTimeMillis()-time) >3000)
                {
                    pos=1;
                }

                if((System.currentTimeMillis()-time) >6000)
                {
                    pos=2;
                }

                if((System.currentTimeMillis()-time) >9000)
                {
                    pos=3;
                }

                if((System.currentTimeMillis()-time) >12000)
                {
                    pos=0;
                    time=System.currentTimeMillis();

                }




                Canvas canvas = surfaceHolder.lockCanvas();
                if(canvas!=null)
                {
                    paint.setColor(Color.WHITE);
                canvas.drawRect(0, 0, this.getWidth(),this.getHeight(), paint);

                if(pos>0)
                {
                paint.setColor(Color.GREEN);

                canvas.drawCircle(200, 200, 50, paint);

                paint.setColor(Color.WHITE);

                canvas.drawCircle(200, 200, 48, paint);
                }


                if(pos>1)
                {
                paint.setColor(Color.GREEN);

                canvas.drawCircle(175, 185, 5, paint);

                canvas.drawCircle(225, 185, 5, paint);
                }



                if(pos>2)
                {
                paint.setStrokeWidth(5);
                // opacity
                //p.setAlpha(0x80); //

                RectF rectF = new RectF(160, 160, 240, 240);


                canvas.drawArc (rectF, 45, 135, true, paint);


                 rectF = new RectF(159, 159, 238, 238);

                 paint.setColor(Color.WHITE);

                canvas.drawArc (rectF, 35, 145, true, paint);
                }




                surfaceHolder.unlockCanvasAndPost(canvas);
                }

                 Log.i("onDraw","Draw");
            }

        }

    }
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;


public class MainActivity extends Activity {

    AnimView av;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        av=new AnimView(this);
        setContentView(av);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        av.onPauseMySurfaceView();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        av.onResumeMySurfaceView();
    }

}
>MainActivity.java

   import android.app.Activity;
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.RectF;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.SurfaceHolder;
    import android.view.SurfaceView;
    import android.view.View;
    import android.view.SurfaceHolder.Callback;

    public class AnimView  extends  SurfaceView implements Runnable,
    Callback  {

        Paint paint = new Paint();
        Thread thread = null;
        SurfaceHolder surfaceHolder;
        boolean running=false;
        long time=0;

        int pos=0;

        public AnimView(Context context) {
            super(context);
            paint.setColor(Color.GREEN);
            surfaceHolder = getHolder();
        }


        public AnimView(Activity context) {
            // TODO Auto-generated constructor stub
            super(context);
            paint.setColor(Color.GREEN);
            surfaceHolder = getHolder();
        }


        public void onResumeMySurfaceView() {

            thread = new Thread(AnimView.this);
            thread.start();
            running=true;


        }

        public void onPauseMySurfaceView() {
            boolean retry = true;
            running = false;
            while (retry) {
                try {
                    thread.join();
                    retry = false;
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                //  e.printStackTrace();
                }
            }
        }

    //  @Override
    //    public void onDraw(Canvas canvas) {
    //            canvas.drawLine(0, 0, 20, 20, paint);
    //            canvas.drawLine(20, 0, 0, 20, paint);
    //            Log.i("onDraw","Draw");
    //         
    //    }

        @Override
        public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void surfaceCreated(SurfaceHolder arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void surfaceDestroyed(SurfaceHolder arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void run() {
            // TODO Auto-generated method stub

            while(running)
            {
                if(time==0)
                {
                    time=System.currentTimeMillis();
                    pos=0;
                }
                if((System.currentTimeMillis()-time) >3000)
                {
                    pos=1;
                }

                if((System.currentTimeMillis()-time) >6000)
                {
                    pos=2;
                }

                if((System.currentTimeMillis()-time) >9000)
                {
                    pos=3;
                }

                if((System.currentTimeMillis()-time) >12000)
                {
                    pos=0;
                    time=System.currentTimeMillis();

                }




                Canvas canvas = surfaceHolder.lockCanvas();
                if(canvas!=null)
                {
                    paint.setColor(Color.WHITE);
                canvas.drawRect(0, 0, this.getWidth(),this.getHeight(), paint);

                if(pos>0)
                {
                paint.setColor(Color.GREEN);

                canvas.drawCircle(200, 200, 50, paint);

                paint.setColor(Color.WHITE);

                canvas.drawCircle(200, 200, 48, paint);
                }


                if(pos>1)
                {
                paint.setColor(Color.GREEN);

                canvas.drawCircle(175, 185, 5, paint);

                canvas.drawCircle(225, 185, 5, paint);
                }



                if(pos>2)
                {
                paint.setStrokeWidth(5);
                // opacity
                //p.setAlpha(0x80); //

                RectF rectF = new RectF(160, 160, 240, 240);


                canvas.drawArc (rectF, 45, 135, true, paint);


                 rectF = new RectF(159, 159, 238, 238);

                 paint.setColor(Color.WHITE);

                canvas.drawArc (rectF, 35, 145, true, paint);
                }




                surfaceHolder.unlockCanvasAndPost(canvas);
                }

                 Log.i("onDraw","Draw");
            }

        }

    }
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;


public class MainActivity extends Activity {

    AnimView av;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        av=new AnimView(this);
        setContentView(av);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        av.onPauseMySurfaceView();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        av.onResumeMySurfaceView();
    }

}

用下面的代码Canvas c=newcanvas(bmp)很容易画出圆圈;c、 drawCircle(cx、cy、半径、绘制),但动画不平滑。我想用同样的方法画视图,但要用动画,比如用铅笔画。你对此有什么建议吗。感谢您的快速回复,因为这在某种程度上帮助了我。您可以通过实现一点编程逻辑使其变得更平滑,只需创建所需的路径并根据时间绘制。@ArashAtaAfarin解决方案只是绘制圆并将图像放置在圆的中心。就这样。