根据别人的例子自己写了,并理解了下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button1"
/>

<Button android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button2"
/>

</LinearLayout>

<SurfaceView android:id="@+id/SurfaceView01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

package MyTestSurfaceView.code;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
/** Called when the activity is first created. */

private Button btnSimpleDraw;
private Button btnTimerDraw;
private SurfaceView sfv;
private SurfaceHolder sfh;

private Timer mTimer;
private MyTimerTask mTimerTask;
int Y_axis[],centerY,oldX,oldY,currentX;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

btnSimpleDraw = (Button)findViewById(R.id.Button01);
btnTimerDraw = (Button)findViewById(R.id.Button02);
btnSimpleDraw.setOnClickListener(new ClickEvent());
btnTimerDraw.setOnClickListener(new ClickEvent());

sfv = (SurfaceView)findViewById(R.id.SurfaceView01);
sfh = sfv.getHolder();

mTimer = new Timer();
mTimerTask = new MyTimerTask();

centerY = (getWindowManager().getDefaultDisplay().getHeight() - sfv.getTop())/ 2 ;
Y_axis = new int[getWindowManager().getDefaultDisplay().getWidth()];
oldX = 0;
oldY = 0;

for( int i = 1; i < Y_axis.length; ++ i )
{
Y_axis[i-1] = centerY - (int)(100*Math.sin(i*2*Math.PI/180));
}
}

class ClickEvent implements View.OnClickListener
{
@Override
public void onClick(View v )
{
if( v == btnSimpleDraw )
{
SimpleDraw(Y_axis.length - 1 );
}
else if( v == btnTimerDraw )
{
oldY = centerY;
mTimer.schedule(mTimerTask,0,50);
}
}
}


class MyTimerTask extends TimerTask
{
@Override
public void run()
{
SimpleDraw(currentX);
++currentX;

if( currentX == Y_axis.length - 1 )
{
ClearDraw();
currentX = 0;
oldY = centerY;
}
}
}


void SimpleDraw( int length )
{
if( length == 0 )
{
oldX = 0;
}

Canvas canvas = sfh.lockCanvas( new Rect(oldX,0,oldX + length , getWindowManager().getDefaultDisplay().getHeight()));

Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStrokeWidth(2);

int y;
for( int i = oldX + 1; i < length; ++ i )
{
y = Y_axis[i-1];
canvas.drawLine(oldX,oldY,i,y,paint);
Log.i("Rollrock" , "Line:" + oldX + " " + oldY + " " + i + " " + y );
oldX = i;
oldY = y;
}

  

sfh.unlockCanvasAndPost(canvas);
}

private void ClearDraw()
{
Canvas canvas = sfh.lockCanvas(null);
canvas.drawColor(Color.BLACK);
sfh.unlockCanvasAndPost(canvas);
}
}

附: 虽然在 xml里面我们可以看到 SurfaceView01 android:layout_height="fill_parent" ,但是通过实际的数据发现,canvas的y坐标的0点再button的下方。

更多相关文章

  1. android edittext 设置行距不影响光标高度
  2. Android(安卓)设置EditText光标颜色及粗细
  3. [Android(安卓)NDK]Android(安卓)JNI开发例子 ---3 在JNI中实现o
  4. Android调用天气预报的WebService简单例子
  5. Android(安卓)EditText 设置行距不影响光标高度
  6. Android(安卓)设置EditText光标Curso颜色及粗细
  7. Android(安卓)SDK 1.0 电话号码的例子(Demo)
  8. [置顶] android 图标的绘制
  9. Android例子—直接通过Binder的onTransact完成跨进程通信

随机推荐

  1. Android(安卓)SDK下载安装及配置教程
  2. 【Android(安卓)界面效果13】关于全屏和
  3. Android(安卓)httpGet 使用 以及使用Hand
  4. Android(安卓)Design Support Library使
  5. Android培训班(15)
  6. android内从泄漏
  7. Android(安卓)Studio导入AOSP项目
  8. 为何GoogleSearch中可以嵌入EditText?
  9. Android(安卓)应用权限管理默认开关的修
  10. Android(安卓)捕获App意外退出错误的日志