21 일 학습 안 드 로 이 드 개발 강좌 의 Surface View
6442 단어 androidSurfaceView
먼저 프로그램 이 실행 중인 캡 처 를 보십시오.
캡 처 1 은 주로 사인 파 를 Surface View 에 직접 그 리 는 모습 을 보 여 주 었 다.
위의 좌우 두 그림 에 비해 오른쪽 그림 은.lockCanvas(null)를 사용 하고 왼쪽 그림 은.lockCanvas(new Rect(oldX,0,oldX+length,getWindowManager().getDefault Display().getHeight())를 사용 하여 두 가지 효 과 를 비교 해 보 세 요.왼쪽 그림 은 지 정 된 Rect 에 따라 그리 기 때문에 오른쪽 그림 의 전체 컨트롤 보다 효율 이 높 습 니 다.또한 화면 을 정리 한 후(canvas.draw Color(Color.Black)는 지난번 그림 의 잔 재 를 남기 지 않 습 니 다.
다음은 main.xml 의 원본 코드 를 붙 입 니 다.
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<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=" ">
<button android:id="@+id/Button02" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text=" ">
<surfaceview android:id="@+id/SurfaceView01"
android:layout_width="fill_parent" android:layout_height="fill_parent">
다음 프로그램 원본 코드 붙 이기:
package com.testSurfaceView;
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 testSurfaceView extends Activity {
/** Called when the activity is first created. */
Button btnSimpleDraw, btnTimerDraw;
SurfaceView sfv;
SurfaceHolder sfh;
private Timer mTimer;
private MyTimerTask mTimerTask;
int Y_axis[],// Y
centerY,//
oldX,oldY,// XY
currentX;// X
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnSimpleDraw = (Button) this.findViewById(R.id.Button01);
btnTimerDraw = (Button) this.findViewById(R.id.Button02);
btnSimpleDraw.setOnClickListener(new ClickEvent());
btnTimerDraw.setOnClickListener(new ClickEvent());
sfv = (SurfaceView) this.findViewById(R.id.SurfaceView01);
sfh = sfv.getHolder();
//
mTimer = new Timer();
mTimerTask = new MyTimerTask();
// y
centerY = (getWindowManager().getDefaultDisplay().getHeight() - sfv
.getTop()) / 2;
Y_axis = new int[getWindowManager().getDefaultDisplay().getWidth()];
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, 5);//
}
}
}
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()));// :
Log.i("Canvas:",
String.valueOf(oldX) + "," + String.valueOf(oldX + length));
Paint mPaint = new Paint();
mPaint.setColor(Color.GREEN);//
mPaint.setStrokeWidth(2);//
int y;
for (int i = oldX + 1; i < length; i++) {//
y = Y_axis[i - 1];
canvas.drawLine(oldX, oldY, i, y, mPaint);
oldX = i;
oldY = y;
}
sfh.unlockCanvasAndPost(canvas);// ,
}
void ClearDraw() {
Canvas canvas = sfh.lockCanvas(null);
canvas.drawColor(Color.BLACK);//
sfh.unlockCanvasAndPost(canvas);
}
}
이상 은 본 고의 모든 내용 입 니 다.여러분 이 안 드 로 이 드 소프트웨어 프로 그래 밍 을 배 우 는 데 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.