您的位置:首页 > 移动开发 > Android开发

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自定义控件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: