surfaceview简单应用
来源:互联网 发布:php如何进行加密和解密 编辑:程序博客网 时间:2024/05/22 02:16
代码片段(5)
[图片] 程序运行的截图
[图片] 1.gif
[图片] 2.gif
[代码] main.xml
01
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
02
<
LinearLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
03
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
04
android:orientation
=
"vertical"
>
05
06
<
LinearLayout
android:id
=
"@+id/LinearLayout01"
07
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
08
<
Button
android:id
=
"@+id/Button01"
android:layout_width
=
"wrap_content"
09
android:layout_height
=
"wrap_content"
android:text
=
"简单绘画"
></
Button
>
10
<
Button
android:id
=
"@+id/Button02"
android:layout_width
=
"wrap_content"
11
android:layout_height
=
"wrap_content"
android:text
=
"定时器绘画"
></
Button
>
12
</
LinearLayout
>
13
<
SurfaceView
android:id
=
"@+id/SurfaceView01"
14
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
></
SurfaceView
>
15
</
LinearLayout
>
[代码] TestSurfaceView.java
001
package
com.testSurfaceView;
002
003
import
java.util.Timer;
004
import
java.util.TimerTask;
005
006
import
android.app.Activity;
007
import
android.graphics.Canvas;
008
import
android.graphics.Color;
009
import
android.graphics.Paint;
010
import
android.graphics.Rect;
011
import
android.os.Bundle;
012
import
android.util.Log;
013
import
android.view.SurfaceHolder;
014
import
android.view.SurfaceView;
015
import
android.view.View;
016
import
android.widget.Button;
017
018
public
class
TestSurfaceView
extends
Activity {
019
/** Called when the activity is first created. */
020
Button btnSimpleDraw, btnTimerDraw;
021
SurfaceView sfv;
022
SurfaceHolder sfh;
023
024
private
Timer mTimer;
025
private
MyTimerTask mTimerTask;
026
int
Y_axis[],
//保存正弦波的Y轴上的点
027
centerY,
//中心线
028
oldX,oldY,
//上一个XY点
029
currentX;
//当前绘制到的X轴上的点
030
031
@Override
032
public
void
onCreate(Bundle savedInstanceState) {
033
super
.onCreate(savedInstanceState);
034
setContentView(R.layout.main);
035
036
btnSimpleDraw = (Button)
this
.findViewById(R.id.Button01);
037
btnTimerDraw = (Button)
this
.findViewById(R.id.Button02);
038
btnSimpleDraw.setOnClickListener(
new
ClickEvent());
039
btnTimerDraw.setOnClickListener(
new
ClickEvent());
040
sfv = (SurfaceView)
this
.findViewById(R.id.SurfaceView01);
041
sfh = sfv.getHolder();
042
043
//动态绘制正弦波的定时器
044
mTimer =
new
Timer();
045
mTimerTask =
new
MyTimerTask();
046
047
// 初始化y轴数据
048
centerY = (getWindowManager().getDefaultDisplay().getHeight() - sfv
049
.getTop()) /
2
;
050
Y_axis =
new
int
[getWindowManager().getDefaultDisplay().getWidth()];
051
for
(
int
i =
1
; i < Y_axis.length; i++) {
// 计算正弦波
052
Y_axis[i -
1
] = centerY
053
- (
int
) (
100
* Math.sin(i *
2
* Math.PI /
180
));
054
}
055
}
056
057
class
ClickEvent
implements
View.OnClickListener {
058
059
@Override
060
public
void
onClick(View v) {
061
062
if
(v == btnSimpleDraw) {
063
SimpleDraw(Y_axis.length-
1
);
//直接绘制正弦波
064
065
}
else
if
(v == btnTimerDraw) {
066
oldY = centerY;
067
mTimer.schedule(mTimerTask,
0
,
5
);
//动态绘制正弦波
068
}
069
070
}
071
072
}
073
074
class
MyTimerTask
extends
TimerTask {
075
@Override
076
public
void
run() {
077
078
SimpleDraw(currentX);
079
currentX++;
//往前进
080
if
(currentX == Y_axis.length -
1
) {
//如果到了终点,则清屏重来
081
ClearDraw();
082
currentX =
0
;
083
oldY = centerY;
084
}
085
}
086
087
}
088
089
/**
090
* 绘制指定区域
091
*/
092
void
SimpleDraw(
int
length) {
093
if
(length ==
0
)
094
oldX =
0
;
095
Canvas canvas = sfh.lockCanvas(
new
Rect(oldX,
0
, oldX + length,
096
getWindowManager().getDefaultDisplay().getHeight()));
// 关键:获取画布
097
Log.i(
"Canvas:"
,
098
String.valueOf(oldX) +
","
+ String.valueOf(oldX + length));
099
100
Paint mPaint =
new
Paint();
101
mPaint.setColor(Color.GREEN);
// 画笔为绿色
102
mPaint.setStrokeWidth(
2
);
// 设置画笔粗细
103
104
int
y;
105
for
(
int
i = oldX +
1
; i < length; i++) {
// 绘画正弦波
106
y = Y_axis[i -
1
];
107
canvas.drawLine(oldX, oldY, i, y, mPaint);
108
oldX = i;
109
oldY = y;
110
}
111
sfh.unlockCanvasAndPost(canvas);
// 解锁画布,提交画好的图像
112
}
113
114
void
ClearDraw() {
115
Canvas canvas = sfh.lockCanvas(
null
);
116
canvas.drawColor(Color.BLACK);
// 清除画布
117
sfh.unlockCanvasAndPost(canvas);
118
119
}
120
}
- surfaceview简单应用
- SurfaceView的简单应用
- 传感器的应用/SurfaceView/制作简单的指南针
- SurfaceView应用浅析
- SurfaceView 双缓冲应用
- SurfaceView 双缓冲应用
- Android SurfaceView应用
- Android应用:自定义SurfaceView
- SurfaceView原理以及应用
- SurfaceView 的应用
- SurfaceView的应用
- SurfaceView的应用
- SurfaceView概述应用
- SurfaceView的简单使用
- SurfaceView简单用法一
- SurfaceView 简单 实例
- surfaceView的简单介绍
- SurfaceView简单使用
- nasm反汇编
- 工作中的吐槽
- “盛大”怎么了
- 土坷垃的情怀
- javascript之预编译
- surfaceview简单应用
- MySQL MongoDB SQL 对应
- 程序员的爱情表白
- away3D Lite1.0——最快最小的flash3D引擎
- 风的世界里有海的七滴泪水
- DataSet和DataReader
- [Android UI界面] 解读CheckBox
- 明年的七夕,你还记得我吗
- 微软企业库4.1学习笔记(二十一)加解密模块1 简介