Android自定义控件之SurfaceView的使用
2017-06-30 22:06
381 查看
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="draw" android:text="绘制" /> <SurfaceView android:id="@+id/sv" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
public class MainActivity extends Activity { // 要有大量绘制的时候,要保证效率的情况下 // MainThread ---> UI ---> 子线程逻辑操作 private SurfaceView mSurfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSurfac 4000 eView = (SurfaceView) findViewById(R.id.sv); mSurfaceView.getHolder().addCallback(new Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { // surfaceView不可见时的回调 System.out.println("destroy"); } @Override public void surfaceCreated(final SurfaceHolder holder) { // surfaceView可见时的回调 System.out.println("create"); // 在主线程执行的, new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <= 360; i++) { // 锁住画布 Canvas canvas = holder.lockCanvas();// if (canvas == null) { return; } RectF oval = new RectF(20, 20, 220, 220); float startAngle = 0;// 开始的角度 float sweepAngle = i;// 扫过的角度 boolean useCenter = true; Paint paint = new Paint(); paint.setColor(Color.RED); paint.setAntiAlias(true);// 设置抗锯齿 // 绘制 canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint); // 通知ui更新,解锁 holder.unlockCanvasAndPost(canvas); } } }).start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // surfaceView大小改变时的回调 System.out.println("change"); } }); // for (int i = 0; i <= 360; i++) { // SurfaceHolder holder = mSurfaceView.getHolder(); // // // 锁住画布 // Canvas canvas = holder.lockCanvas();// // // RectF oval = new RectF(20, 20, 220, 220); // float startAngle = 0;// 开始的角度 // float sweepAngle = i;// 扫过的角度 // boolean useCenter = true; // // Paint paint = new Paint(); // paint.setColor(Color.RED); // paint.setAntiAlias(true);// 设置抗锯齿 // // // 绘制 // canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint); // // // 通知ui更新,解锁 // holder.unlockCanvasAndPost(canvas); // } } public void draw(View view) { for (int i = 0; i <= 360; i++) { SurfaceHolder holder = mSurfaceView.getHolder(); // 锁住画布 Canvas canvas = holder.lockCanvas();// RectF oval = new RectF(20, 20, 220, 220); float startAngle = 0;// 开始的角度 float sweepAngle = i;// 扫过的角度 boolean useCenter = true; Paint paint = new Paint(); paint.setColor(Color.RED); paint.setAntiAlias(true);// 设置抗锯齿 // 绘制 canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint); // 通知ui更新,解锁 holder.unlockCanvasAndPost(canvas); } } }
参考:Android自定义控件
相关文章推荐
- 【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!
- android中使用自定义控件是报android.view.InflateException: Binary XML 异常
- Android 开发知识 SurfaceView的使用
- android 使用双缓冲辨析及surfaceview使用例程
- Android 提高 5 SurfaceView绘图容器的基本使用
- Android surface view 的一些使用
- android图像绘制(四)——SurfaceView问题,自定义控件
- android 如何使用surfaceview绘制类似游戏手柄的摇杆?
- Android提高第二篇之SurfaceView的基本使用
- Android提高第二篇之SurfaceView的基本使用
- Android开发中的游戏开发使用View还是SurfaceView?
- Android提高第二篇之SurfaceView的基本使用
- Android surfaceview使用详解
- 【Android2D游戏开发十四】(未完待续)手把手教你在SurfaceView中照样使用Android 动画—Tween Animation!
- Android中SurfaceView的使用示例
- Android中SurfaceView的使用详解
- 【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!
- android surfaceView与view使用小结
- android 使用双缓冲辨析及surfaceview使用例程
- Android之SurfaceView使用总结