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 을 빼 면 이 값 은 맞 힌 것 입 니 다.시 뮬 레이 터 와 실제 컴퓨터 에서 모두 정확 하 게 위 치 를 정할 줄 은 몰 랐 습 니 다.
응용 은 비교적 간단 하지만 여러분 은 이 를 바탕 으로 그 기능 을 풍부하게 하여 제대로 된 안 드 로 이 드 응용 이 되도록 할 수 있 습 니 다.
이상 은 안 드 로 이 드 간단 한 낙서 판 의 간단 한 예 입 니 다.추 후 관련 자 료 를 계속 정리 하 겠 습 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.