Android 개발 인 스 턴 스 단순 낙서 판

안 드 로 이 드 에서 작은 애플 리 케 이 션 을 개발 하면 지식 도 쌓 을 수 있 고 즐거움 도 증가 할 수 있 습 니 다.미 션 개발 과 달리 안 드 로 이 드 시스템 에서 간단 한 낙서 판 을 실현 하 는 것 이 우리 가 연습 하 는 좋 은 방법 이 라 고 생각 합 니 다.
       낙서 판 응용 코드 구현
       새 프로젝트 MyWall,수정/res/layot/main.xml 파일 입 니 다.Surface View 와 두 개의 Button 을 추가 하고 Relative Layout 레이아웃 을 사 용 했 습 니 다.완전한 main.xml 파일 은 다음 과 같 습 니 다.
XML/HTML 코드

<?xml version="1.0" encoding="utf-8"?> 
 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
> 
 
<SurfaceView 
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/line"
android:layout_alignParentTop="true"
/>
 
<LinearLayout
android:id="@+id/line"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
>
 
<Button
android:id="@+id/flushbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="  "
/>
 
<Button
android:id="@+id/colorbutton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" 
android:text="  "
/>
</LinearLayout>
</RelativeLayout> 
       이 어 MyWallActivity.java 파일 을 수정 합 니 다.가장 중요 한 것 은 onTouchEvent()함 수 를 다시 썼 습 니 다.이 함수 에서 터치 스크린 드래그 이 벤트 를 걸 러 낸 다음 에 해당 하 는 좌표 와 선 을 가 져 옵 니 다.완전한 내용 은 다음 과 같다.
자바 코드

package com.nan.wall;   
   
import android.app.Activity;   
import android.app.AlertDialog;   
import android.app.Dialog;   
import android.content.DialogInterface;   
import android.graphics.Canvas;   
import android.graphics.Color;   
import android.graphics.Paint;   
import android.graphics.Rect;   
import android.os.Bundle;   
import android.view.MotionEvent;   
import android.view.SurfaceHolder;    
import android.view.SurfaceView;   
import android.view.View;    
import android.widget.Button;    
   
public class MyWallActivity extends Activity    
{    
private SurfaceView mSurfaceView = null;    
private SurfaceHolder mSurfaceHolder = null;    
private Button cleanButton = null;    
private Button colorButton = null;    
   
private float oldX = 0f;    
private float oldY = 0f;    
   
private boolean canDraw = false;   
private Paint mPaint = null;   
//                
private int whichColor = 0;    
   
/** Called when the activity is first created. */   
  @Override    
public void onCreate(Bundle savedInstanceState)    
{    
super.onCreate(savedInstanceState);   
setContentView(R.layout.main);   
      
mSurfaceView = (SurfaceView)this.findViewById(R.id.surfaceview);   
mSurfaceHolder = mSurfaceView.getHolder();   
   
mPaint = new Paint();    
//         
mPaint.setColor(Color.RED);    
//         
mPaint.setStrokeWidth(2.0f);   
cleanButton = (Button)this.findViewById(R.id.flushbutton);    
//        
cleanButton.setOnClickListener(new View.OnClickListener()    
{    
   
@Override    
public void onClick(View v)    
{    
// TODO Auto-generated method stub    
//    SurfaceView    
Canvas mCanvas = mSurfaceHolder.lockCanvas();    
mCanvas.drawColor(Color.BLACK);    
//    ,       
mSurfaceHolder.unlockCanvasAndPost(mCanvas);    
//         
mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));    
mSurfaceHolder.unlockCanvasAndPost(mCanvas);    
}   
});     
   
colorButton = (Button)this.findViewById(R.id.colorbutton);   
//        
colorButton.setOnClickListener(new View.OnClickListener()    
{    
   
@Override    
public void onClick(View v)    
{    
 // TODO Auto-generated method stub   
   
Dialog mDialog = new AlertDialog.Builder(MyWallActivity.this)    
.setTitle("    ")    
.setSingleChoiceItems(new String[]{"  ","  ","  "}, whichColor, new DialogInterface.OnClickListener()    
{    
@Override   
public void onClick(DialogInterface dialog, int which)    
{    
 // TODO Auto-generated method stub    
switch(which)    
{    
case 0:    
{    
//         
mPaint.setColor(Color.RED);    
whichColor = 0;    
break;    
}    
case 1:    
{    
//        
mPaint.setColor(Color.GREEN);   
whichColor = 1;   
break;   
}   
case 2:   
{   
//     106                 
mPaint.setColor(Color.BLUE);   
whichColor = 2;                 
break;                 
}   
}   
}   
})   
.setPositiveButton("  ", new DialogInterface.OnClickListener()   
{   
@Override   
public void onClick(DialogInterface dialog, int which)    
{   
// TODO Auto-generated method stub   
dialog.dismiss();   
}   
})   
.create();   
mDialog.show();   
}   
});   
   
   
@Override   
public boolean onTouchEvent(MotionEvent event)   
{      
//  x     
float x = event.getX();   
//  y  (                    )   
float y = event.getY()-50;   
//           
if(canDraw)   
{      
//         
switch(event.getAction())   
{   
//          
case MotionEvent.ACTION_MOVE:   
{   
//    SurfaceView   
Canvas mCanvas = mSurfaceHolder.lockCanvas();     
mCanvas.drawLine(x, y, oldX, oldY, mPaint);   
mSurfaceHolder.unlockCanvasAndPost(mCanvas);   
//        
mSurfaceHolder.lockCanvas(new Rect(0, 0, 0, 0));   
mSurfaceHolder.unlockCanvasAndPost(mCanvas);   
break;   
}   
}   
}   
//     x      
oldX = x;   
//     y      
oldY = y;   
   
canDraw = true;   
   
return true;   
}   
   
}   
응용 테스트
       시 뮬 레이 터 에서 이 프로그램 을 실행 하 는 것 은 다음 과 같은 효과 입 니 다.

       Android 핸드폰 에서 실행 효 과 는 다음 과 같 습 니 다.
 
       글 씨 는 좀 추 하 게 썼 지만 기능 은 실현 되 었 다.Y 좌 표를 얻 은 후에 오프셋 값 50 을 빼 면 이 값 은 맞 힌 것 입 니 다.시 뮬 레이 터 와 실제 컴퓨터 에서 모두 정확 하 게 위 치 를 정할 줄 은 몰 랐 습 니 다.
       응용 은 비교적 간단 하지만 여러분 은 이 를 바탕 으로 그 기능 을 풍부하게 하여 제대로 된 안 드 로 이 드 응용 이 되도록 할 수 있 습 니 다.
       이상 은 안 드 로 이 드 간단 한 낙서 판 의 간단 한 예 입 니 다.추 후 관련 자 료 를 계속 정리 하 겠 습 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기