Android SurfaceView 화판 조작

본 논문 의 사례 는 안 드 로 이 드 Surface View 패 널 작업 의 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
화판―경 로 를 그리다

package com.example.review.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 *      
 */
public class HuabanView extends SurfaceView implements SurfaceHolder.Callback {

 private SurfaceHolder surfaceHolder;
 private Path path = new Path();


 public HuabanView(Context context) {
  super(context);
 }

 public HuabanView(Context context, AttributeSet attrs) {
  super(context, attrs);
  surfaceHolder = getHolder();
  surfaceHolder.addCallback(this);//  surfaceview     
 }

 public HuabanView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }

 public HuabanView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  super(context, attrs, defStyleAttr, defStyleRes);
 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  new HuabanThread().start();
 }

 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {

 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  float x = event.getX();
  float y = event.getY();
  int action = event.getAction();
  if (action == MotionEvent.ACTION_DOWN) {//  
   path.moveTo(x, y);
  } else if (action == MotionEvent.ACTION_MOVE) {//  
   path.lineTo(x, y);
  }
  return true;
 }

 class HuabanThread extends Thread {
  @Override
  public void run() {
   super.run();
   //TODO:  
   Paint paint = new Paint();
   paint.setColor(Color.BLACK);
   paint.setStrokeWidth(20);
   paint.setStyle(Paint.Style.STROKE);
   paint.setAntiAlias(true);
   //TODO:  
   while (true) {
    Canvas canvas = surfaceHolder.lockCanvas();
    //     
    if (canvas == null){
     return;
    }
    canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
    canvas.drawColor(Color.WHITE);
    canvas.drawPath(path,paint);
    surfaceHolder.unlockCanvasAndPost(canvas);
   }
  }
 }
 public void close(){
  path.reset();
 }
}
화판―동적 직선 을 그리다

package com.example.review.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

/**
 *      
 *      
 */
public class LineView extends SurfaceView implements SurfaceHolder.Callback {

 private SurfaceHolder surfaceHolder;
 private Path path = new Path();
 private int x = 0;

 public LineView(Context context) {
  super(context);
 }

 public LineView(Context context, AttributeSet attrs) {
  super(context, attrs);
  surfaceHolder = getHolder();
  surfaceHolder.addCallback(this);//  surfaceview     
 }

 public LineView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
 }

 public LineView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
  super(context, attrs, defStyleAttr, defStyleRes);
 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  new HuabanThread().start();
 }

 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

 }

 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {

 }

 class HuabanThread extends Thread {
  @Override
  public void run() {
   super.run();
   //TODO:  
   Paint paint = new Paint();
   paint.setColor(Color.BLACK);
   paint.setStrokeWidth(20);
   paint.setStyle(Paint.Style.STROKE);
   paint.setAntiAlias(true);
   //TODO:  
   while (true) {
    Canvas canvas = surfaceHolder.lockCanvas();
    //     
    if (canvas == null){
     return;
    }
    canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
    canvas.drawColor(Color.WHITE);
    canvas.drawLine(0,100,x++,100,paint);
    surfaceHolder.unlockCanvasAndPost(canvas);
   }
  }
 }

 public void close(){
  path.reset();
 }

}
기본 도형

// 
canvas.drawOval(50,100,150,200,paint);
//  
canvas.drawArc(500,500,700,700,20,180,true,paint);
//  
canvas.drawRect(100,300,250,400,paint);
//   
canvas.drawLine(100,450,0,600,paint);
canvas.drawLine(0,600,400,600,paint);
canvas.drawLine(100,450,400,600,paint);
//  
canvas.drawLine(100,700,200,700,paint);
canvas.drawLine(100,700,0,900,paint);
canvas.drawLine(0,900,400,900,paint);
canvas.drawLine(200,700,400,900,paint);

//  
canvas.drawText("  ",100,1000,paint);
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기