Android 불규칙 이미지 색상 채 우기 게임
최근 에 단체 에서 한 친구 가 단체 에서 불규칙 한 이미 지 를 채 우 는 것 을 우연히 보 았 는데 그 자체 가 배 우 는 것 을 좋아 하고 실 용적 인 태도 로 관련 자 료 를 찾 아 보 았 다.이런 착색 자료 에 대해 가장 좋 은 것 은 관련 app 을 검색 하 는 것 입 니 다.제 관찰 에 따 르 면 불규칙 한 이미 지 는 착색 게임 에 채 워 넣 는 것 이 많 지만 대체적으로 두 가지 로 나 눌 수 있 습 니 다.
층 기반 충전
경계 기반 채 우기
그러면 상기 두 가지 에 대해 우 리 는 두 편의 박문 을 통 해 설명 할 것 이다.본 편 은 바로 층 을 바탕 으로 하 는 충전 방식 을 서술 하 는 것 이다.그러면 층 을 바탕 으로 하 는 충전 방식 은 무엇 입 니까?사실은 한 장의 그림 은 실제 적 으로 여러 층 으로 구 성 된 것 으로 각 층 은 일부 이미지(이미지 가 없 는 부분 은 투명)를 표시 하고 다 층 으로 중첩 한 후에 완전한 도안 을 형성 하 며 그림 층 간 은 중첩 되 는 관계 로 다음 그림 과 유사 하 다.
PS 를 배 웠 다 면 더 이상 알 수 없 을 것 이 라 고 믿 습 니 다.예 를 들 어 하늘 을 그 리 려 면 맨 밑 에 푸 른 하늘 을 그 릴 수 있 고 윗 층 에 흰 구름 을 그 릴 수 있 으 며 윗 층 에 작은 새 를 그 릴 수 있다.그리고 3 층 이 겹 쳐 지면 작은 새 한 마리 가 하늘 을 날 고 있 는 그림 이다.
2.효과 와 분석
자,이제 오늘 의 효 과 를 보 겠 습 니 다.
ok,간단 한 착색 효 과 를 볼 수 있 습 니 다.사실은 원리 가 간단 합 니 다.우선,이 그림 은 실제 적 으로 7 층 으로 구성 되 어 있 습 니 다.
예 를 들 어 다음 그림.
만약 우리 가 이 그림 의 어느 위치 에 착색 을 해 야 한다 면,실제로는 한 층 의 불투명 한 구역 에 착색 을 해 야 한다.실제로
사용자 가 클릭 한(x,y)->어느 층 에 떨 어 진 불투명 영역 을 판단 합 니 다->그리고 이 층 의 불투명 영역 에 착색 합 니 다.
ok,이러한 원 리 는 명확 하 게 서술 할 수 있 습 니 다.사실은 매우 간단 합 니 다.이 원 리 를 바탕 으로 우 리 는 View 를 사용자 정의 한 다음 에 그림 을 그 릴 수 있 습 니 다.마지막 으로 상기 절차 에 따라 코드 를 작성 할 수 있 습 니 다.그러나 우 리 는 게 으 름 을 피 울 수 있 는 곳 이 있 습 니 다.사실은 우리 가 한 층 의 그림 을 그 릴 필요 가 없습니다.우 리 는 Drawable 을 이용 하여 그림 의 중첩 작업 을 완성 할 수 있 습 니 다.우 리 는 Drawable 을 Layer Drawable 이 라 고 부 릅 니 다.해당 하 는 xml 는 layer-list 입 니 다.우 리 는 사용 을 통 해 우리 의 업 무 를 크게 간소화 할 수 있 습 니 다.
3.인 코딩 과 실현
상술 한 것 은 이미 명확 하 게 묘사 되 었 으 니,제 가 다시 여러분 께 세분 화 해 드 리 겠 습 니 다.
1.layer-list 에서 우리 의 drawable 을 정의 합 니 다.
2.그리고 이 drawable 을 우리 View 의 배경 으로 합 니 다.
3.onTouchEvent 방법 복사 하기;
4.사용자 가 클릭 한 좌표 가 어느 층 의 불투명 한 위치 에 있 는 지 판단 하고 이 층 의 불투명 한 영역 색상 을 변경 합 니 다.
(1)layer-list
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/eel_mask1"/>
<item
android:drawable="@drawable/eel_mask2"/>
<item
android:drawable="@drawable/eel_mask3"/>
<item
android:drawable="@drawable/eel_mask4"/>
<item
android:drawable="@drawable/eel_mask5"/>
<item
android:drawable="@drawable/eel_mask6"/>
<item
android:drawable="@drawable/eel_mask7"/>
</layer-list>
ok,그러면 우리 drawable 은 ok~~말 안 했 지만 layer-list 는 많은 일 을 할 수 있 으 니 지 켜 보 세 요.(2)보기 코드
package com.zhy.colour_app_01;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import java.util.Random;
/**
* Created by zhy on 15/5/14.
*/
public class ColourImageBaseLayerView extends View
{
private LayerDrawable mDrawables;
public ColourImageBaseLayerView(Context context, AttributeSet attrs)
{
super(context, attrs);
mDrawables = (LayerDrawable) getBackground();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(mDrawables.getIntrinsicWidth(), mDrawables.getIntrinsicHeight());
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
final float x = event.getX();
final float y = event.getY();
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
Drawable drawable = findDrawable(x, y);
if (drawable != null)
drawable.setColorFilter(randomColor(), PorterDuff.Mode.SRC_IN);
}
return super.onTouchEvent(event);
}
private int randomColor()
{
Random random = new Random();
int color = Color.argb(255, random.nextInt(256), random.nextInt(256), random.nextInt(256));
return color;
}
private Drawable findDrawable(float x, float y)
{
final int numberOfLayers = mDrawables.getNumberOfLayers();
Drawable drawable = null;
Bitmap bitmap = null;
for (int i = numberOfLayers - 1; i >= 0; i--)
{
drawable = mDrawables.getDrawable(i);
bitmap = ((BitmapDrawable) drawable).getBitmap();
try
{
int pixel = bitmap.getPixel((int) x, (int) y);
if (pixel == Color.TRANSPARENT)
{
continue;
}
} catch (Exception e)
{
continue;
}
return drawable;
}
return null;
}
}
ok,코드 도 간단 합 니 다.먼저 drawable 을 view 의 배경 으로 한 다음 에 구조 에서 drawable(Layer Drawable)을 가 져 옵 니 다.다음 에 onTouchEvent 를 복사 하고 사용자 가 클릭 한(x,y)을 캡 처 합 니 다.(x,y)에 따라 현재 클릭 한 층 이 어느 층 인지 찾 습 니 다.(비 투명 영역 에서 클릭 해 야 합 니 다)마지막 으로 setColorFilter 설정 을 통 해 색상 을 바 꾸 면 됩 니 다.easy 죠?마지막 으로 레이아웃 파일 을 붙 입 니 다.(3)레이아웃 파일
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<com.zhy.colour_app_01.ColourImageBaseLayerView
android:background="@drawable/eel"
android:layout_width="match_parent"
android:layout_centerInParent="true"
android:layout_height="match_parent"/>
</RelativeLayout>
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.