android开发-简单动画2
2015-07-24 17:00
363 查看
前面一篇写的是利用postInvalidate函数和onDraw函数来实现简单动画的,这里要说的第二种方法我感觉比较类似,是利用擦除函数来完成这个简单动画的***。简单的说就是先利用和上一篇中一样的Paint(画笔),Canvas(画布)这些类来进行绘画,然后在进行下次绘画之前将前面一次的绘画擦除,在进行新的绘画,在时间很快的情况下就是一个简单的动画了,擦除绘画就是将画布的颜色恢复就行。个人觉得这和前面一种做法差不多。这里还是用画线为例。
然后在主Activity中调用。
因为不是demo,所以代码可能不详实。
[code]public class SlideViewSingleSelfVideoActivity extends SurfaceView implements SurfaceHolder.Callback { protected SurfaceHolder surfaceholder; // private MyThread thread; private static final int SPEEN_DISTANCE = 5; // 中间线每次刷新移动的距离 private Paint paint; // 画笔对象的引用 private int slideTop; // 中间滑动线的最顶端位置 private int slideBottom; // 中间滑动线的最底端位置 private int slideLeft; // 中间滑动线的最左边位置 private int slideRight; // 中间滑动线的最右边位置 public SlideViewSingleSelfVideoActivity(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub surfaceholder = getHolder(); // 获取SurfaceHolder对象 surfaceholder.addCallback(this); // 添加回调 surfaceholder.setFormat(PixelFormat.TRANSPARENT); // 设置为透明 // setZOrderOnTop(true); // 设置视图在顶层 } public void clearDraw() { synchronized(surfaceholder) { Canvas canvas = surfaceholder.lockCanvas(); canvas.drawColor(Color.BLUE);// 清除画布 surfaceholder.unlockCanvasAndPost(canvas); } } public void Draw(int y) { synchronized(surfaceholder) { Canvas canvas = surfaceholder.lockCanvas(); canvas.drawColor(Color.BLUE); // 这里是绘制背景 paint = new Paint(); paint.setAntiAlias(true); // 反锯齿 //获取屏幕的宽高 int width = canvas.getWidth(); slideLeft = 50; slideRight = width - slideLeft; slideTop = y; slideBottom = y + 5; //绘制中间的线,每次刷新界面,中间的线往下移动SPEEN_DISTANCE paint.setColor(Color.RED); // 将画笔设置成红色 canvas.drawRect(slideLeft, slideTop, slideRight, slideBottom, paint); surfaceholder.unlockCanvasAndPost(canvas); } } @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 } }
然后在主Activity中调用。
[code] /* * 刷新屏幕,移动绘制线 */ private SlideViewSingleSelfVideoActivity m_vVideoViewDraw = null; private int lastY = 350; private TimerTask mMoveTask; private void start() { m_vVideoViewDraw =(SlideViewSingleSelfVideoActivity)findViewById(SystemView.getViewID(this,"videoview_surface_draw")); m_vVideoViewDraw.setVisibility(View.VISIBLE); mMoveTask = new TimerTask() { @Override public void run() { m_vVideoViewDraw.Draw(lastY); lastY += 20; // 向下 if(lastY > 1100) { m_vVideoViewDraw.clearDraw(); lastY = 350; } } }; mVideoRecordTimer.schedule(mMoveTask, 0,100); }
因为不是demo,所以代码可能不详实。
相关文章推荐
- android dialog使用详情
- 【Android应用开发技术:用户界面】视图组件View
- android获取具体时间项,解析string到date
- 第一次使用Android Studio时你应该知道的一切配置
- Android修改软键盘回车键并监听
- Android 四大组件学习之ContentProvider四
- Android PropertyAnimation官网文档翻译
- Android Adapter推荐写法
- Android Adapter推荐写法
- Android延时执行调用的几种方法(转)
- Android常用的设计模式
- Android 打包Jar(发布SDK)常见问题及解决方案
- Android BaseAdapter和ViewHolder 优化 解决ListView的item抢焦点问题和item错乱问题
- android 逆向分析常用API
- Android Support 包里究竟有什么
- Android初学习 - 分别以Java code和XML两种方式给FrameLayout布局的Activity增加一个遮罩效果的实现
- Android ListView 用法
- 【用户界面:android-Ultra-Pull-To-Refresh】之二:android-Ultra-Pull-To-Refresh框架分析
- Espresso——Android测试工具Espresso简介
- android布局-GridLayout