最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android不規(guī)則圖像填充顏色小游戲

 更新時間:2018年05月08日 15:51:40   作者:鴻洋_  
這篇文章主要介紹了Android不規(guī)則圖像填充顏色小游戲,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧

一、概述

近期群里偶然看到一哥們在群里聊不規(guī)則圖像填充什么四聯(lián)通、八聯(lián)通什么的,就本身好學務實的態(tài)度去查閱了相關(guān)資料。對于這類著色的資料,最好的就是去搜索些相關(guān)app,根據(jù)我的觀察呢,不規(guī)則圖像填充在著色游戲里面應用居多,不過大致可以分為兩種:

基于層的的填充

基于邊界的填充

那么針對上述兩種,我們會通過兩篇博文來講解,本篇就是敘述基于層的填充方式,那么什么基于層的填充方式呢?其實就是一張圖實際上是由多個層組成的,每個層顯示部分圖像(無圖像部分為透明),多層疊加后形成一張完整的圖案,圖層間是疊加的關(guān)系,類似下圖。

相信大家如果學過PS,對上述肯定再了解不過了。比如你要繪制一個天空,你可以最底層去繪制藍天,在上層繪制白云,再上層會執(zhí)行小鳥。然后三層疊加以后就是一副小鳥在天空翱翔的圖了。

二、效果與分析

好了,接下來看下今天的效果。

ok,可以看到一個簡單的著色效果,其實原理很簡單,首先呢,該圖實際上是由7層組成:

例如下圖。

那么如果我們需要給這幅圖的某個位置著色,實際上是給某一層的非透明區(qū)域著色。實際上就轉(zhuǎn)化為:

用戶點擊的(x,y)-> 判斷落在哪一層的非透明區(qū)域 -> 然后給該層非透明區(qū)域著色。

ok,這樣原理就敘述清楚了,實際上也是非常的簡單,基于該原理,我們可以自定義一個View,然后一幅一幅去繪制圖層,最后按照上述步驟去編寫代碼。不過,我們還有可以偷懶的地方,其實沒必要我們自己去一個圖層一個圖層的繪制,我們可以利用Drawable去完成圖層疊加的工作,我們有一類Drawable叫做LayerDrawable,對應的xml為layer-list,我們可以通過使用LayerDrawable極大的簡化我們的工作。

三、編碼與實現(xiàn)

上述已經(jīng)描述很清楚了,我再給大家細化一下:

1.layer-list中去定義我們的drawable;

2.然后把該drawable作為我們View的背景;

3.復寫onTouchEvent方法;

4.判斷用戶點擊的坐標落在哪一層的非透明位置,改變該層非透明區(qū)域顏色。

(一)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可以做很多事情,大家可以關(guān)注下。

(二)View代碼

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的背景,然后在構(gòu)造中獲取drawable(LayerDrawable)。接下來復寫onTouchEvent,捕獲用戶點擊的(x,y),根據(jù)(x,y)去找出當前點擊的是哪一層(必須點擊在非透明區(qū)域),最后通過設置setColorFilter去改變顏色即可~很easy吧最后貼下布局文件:

(三)布局文件

<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>

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 4種Android屏幕自適應解決方案

    4種Android屏幕自適應解決方案

    在開發(fā)android項目的時候,我們常常會考慮這樣的問題:為不同的手機屏幕顯示出最佳的界面,以提升用戶的體驗。本文介紹的是4種Android屏幕自適應解決方案,有興趣的可以了解一下。
    2016-10-10
  • Android中顏色選擇器和改變字體顏色的實例教程

    Android中顏色選擇器和改變字體顏色的實例教程

    這篇文章主要介紹了Android中顏色選擇器和改變字體顏色的實例教程,其中改變字體顏色用到了ColorPicker顏色選擇器,需要的朋友可以參考下
    2016-04-04
  • Android學習之菜單的使用方法

    Android學習之菜單的使用方法

    這篇文章主要為大家詳細介紹了Android學習之菜單的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android開發(fā)之利用Activity實現(xiàn)Dialog對話框

    Android開發(fā)之利用Activity實現(xiàn)Dialog對話框

    這篇文章主要給大家介紹了Android開發(fā)之如何利用Activity實現(xiàn)Dialog對話框效果,文中給出了詳細的示例代碼,相信對大家的理解及學習具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-12-12
  • Android提高之Android手機與BLE終端通信

    Android提高之Android手機與BLE終端通信

    這篇文章主要介紹了Android手機與BLE終端通信的方法,有很大的實用價值,需要的朋友可以參考下
    2014-08-08
  • Android App中的GridView網(wǎng)格布局使用指南

    Android App中的GridView網(wǎng)格布局使用指南

    GridView布局所實現(xiàn)的就是類似于九宮格的矩陣界面效果,下面整理了Android App中的GridView網(wǎng)格布局使用指南,包括分割線的添加與自定義GridView的實現(xiàn)等技巧,需要的朋友可以參考下
    2016-06-06
  • android UI繪制加減號按鈕

    android UI繪制加減號按鈕

    這篇文章主要為大家詳細介紹了android UI繪制加減號按鈕,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • android通過servlet上傳文件到服務器

    android通過servlet上傳文件到服務器

    這篇文章主要為大家詳細介紹了android通過servlet上傳文件到服務器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Android 設置顏色的方法總結(jié)

    Android 設置顏色的方法總結(jié)

    這篇文章主要介紹了Android 設置顏色的方法總結(jié)的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握設置顏色的方法,需要的朋友可以參考下
    2017-09-09
  • Android實現(xiàn)APP在線下載更新

    Android實現(xiàn)APP在線下載更新

    這篇文章主要為大家詳細介紹了Android實現(xiàn)APP在線下載更新的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

丹巴县| 西昌市| 云和县| 广宁县| 阿拉善左旗| 庆云县| 普格县| 宁明县| 汉川市| 常熟市| 麻阳| 南京市| 翁牛特旗| 玉龙| 岚皋县| 建始县| 阿瓦提县| 临颍县| 彰化县| 青阳县| 肥东县| 江津市| 邹平县| 安岳县| 尚义县| 舞阳县| 安达市| 阳春市| 湘乡市| 云梦县| 海口市| 洮南市| 石河子市| 泽普县| 德钦县| 平顺县| 盐池县| 罗江县| 芦溪县| 佛教| 远安县|