Android 스 크 래 치 기능 구현 코드
실현 하 는 절 차 는 사실은 맨손으로 세 개의 그림 을 그 려 서 겹 치 는 것 이다.맨 윗 층 은 그림 을 그 리 는 데 필요 한 문제 이다.바로 상기 에서 말 한'소 년 아,나 를 긁 어 라'이다.두 번 째 층 은 넓 고 높 은 회색 층 을 덮 는 것 이 고 세 번 째 층 은 결과 층 이 며 많은 것 은 말 하지 않 는 다.구체 적 으로 다음 과 같이 실현 하고 상세 한 주석 을 첨부 한다.
/**
*
* created by zero on 2016-9-9
*
*
*
*/
public class ScratchView extends View
{
public ScratchView(Context context)
{
super(context);
init();
}
private Canvas mCanvas = null;
private Path mPath = null;
private Paint mPaint = null;
//
private int screenWidth = 720;
private int screenHeight = 360;
private Bitmap bitmap = null;
private void init() {
// TODO Auto-generated method stub
mPath = new Path();
bitmap = Bitmap.createBitmap(screenWidth, screenHeight,
Config.ARGB_8888);
// mPaint
mPaint = new Paint();
mPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
mPaint.setAntiAlias(true);
mCanvas = new Canvas();
mPaint.setDither(true);
//
mPaint.setStyle(Style.STROKE);
// ,
mPaint.setStrokeWidth(10);
mPaint.setStrokeCap(Cap.ROUND);
mPaint.setStrokeJoin(Join.ROUND);
// , 16 ,
mPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
mPaint.setAlpha(0);
mCanvas = new Canvas(bitmap);
mCanvas.drawColor(Color.parseColor("#c0c0c0"));
setBitmapText();
}
private void setBitmapText() {
Paint paint = new Paint();
paint.setTextSize(40);
paint.setColor(Color.parseColor("#9f9fa0"));
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.CENTER);
paint.setFakeBoldText(true);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.alpha(0));
canvas.rotate(-20);
//
for (int i = 0; i < screenWidth + 200; i += 300)
{
for (int j = 0; j < screenHeight + 200; j += 60)
{
canvas.drawText(" , !", i, j, paint);
}
}
setScratchBackground(" ");
}
// ,
public void setScratchBackground(String txt_win) {
// TODO Auto-generated method stub
Paint paint = new Paint();
Bitmap bitmap = Bitmap.createBitmap(screenWidth, screenHeight,
Config.ARGB_8888);
paint.setTextSize(40);
paint.setColor(Color.BLACK);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.CENTER);
Canvas canvas = new Canvas(bitmap);
canvas.drawColor(Color.alpha(0));
canvas.drawText(txt_win, screenWidth / 2, 60, paint);
setBackgroundDrawable(new BitmapDrawable(getResources(), bitmap));
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
mCanvas.drawPath(mPath, mPaint);
canvas.drawBitmap(bitmap, 0, 0, null);
}
int x = 0;
int y = 0;
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
int action = event.getAction();
int currX = (int) event.getX();
int currY = (int) event.getY();
switch (action)
{
case MotionEvent.ACTION_DOWN:
{
mPath.reset();
x = currX;
y = currY;
mPath.moveTo(x, y);
}
break;
case MotionEvent.ACTION_MOVE:
{
mPath.quadTo(x, y, currX, currY);
x = currX;
y = currY;
postInvalidate();
}
break;
case MotionEvent.ACTION_UP:
{
new Thread(mRunnable).start();
}
case MotionEvent.ACTION_CANCEL:
{
mPath.reset();
}
break;
}
return true;
}
private Runnable mRunnable = new Runnable()
{
private int[] mPixels;
@Override
public void run() {
float wipeArea = 0;
float totalArea = screenWidth * screenHeight;
Bitmap mBitmap = bitmap;
mPixels = new int[screenWidth * screenHeight];
/**
*
*/
mBitmap.getPixels(mPixels, 0, screenWidth, 0, 0, screenWidth,
screenHeight);
/**
*
*/
for (int i = 0; i < screenWidth; i++)
{
for (int j = 0; j < screenHeight; j++)
{
int index = i + j * screenWidth;
if (mPixels[index] == 0)
{
wipeArea++;
}
}
}
/**
* ,
*/
if (wipeArea > 0 && totalArea > 0)
{
int percent = (int) (wipeArea * 100 / totalArea);
/**
* , 20
*/
if (percent > 20)
{
/**
* , toast, ,
*/
Looper.prepare();
Toast.makeText(getContext(), " " + percent + "%",
Toast.LENGTH_LONG).show();
Looper.loop();
}
}
}
};
}
회사 가 필요 로 하 는 효 과 를 보 내 는 것 입 니 다.상기 코드 는 하나의 실현 일 뿐 이 고 각종 스타일 은 스스로 실현 해 야 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.