Android Part 1의 13개 드로어블 요약


이 섹션 소개:

이 섹션부터 Android의 그리기 및 애니메이션에 대한 기본 지식을 배우고 고급 부품의 사용자 정의를 준비합니다. 기초를 다져라! 첫 번째 섹션에서는 Android의 Drawable을 살펴보겠습니다! 안드로이드는 무려 13가지 종류의 기능을 제공합니다. Drawable, 이번 섹션에서는 하나씩 그려보겠습니다!

1.png


Drawable 리소스 사용에 대한 참고 사항

  • Drawable은 두 가지 유형으로 나뉩니다. 하나는 일반 이미지 리소스입니다. Android Studio에서는 일반적으로 res/mipmap 디렉터리에 넣습니다. 이전 이클립스와는 다르다! 또한 프로젝트를 Android 프로젝트 모드로 전환하면 직접 할 수 있습니다. 이미지를 mipmap 디렉터리에 놓으면 AS가 자동으로 hdpi, xhdpi...로 분류합니다! 다른 하나는 우리가 작성하는 XML 형식의 Drawable 리소스입니다. 일반적으로 res/drawable 디렉터리에 넣습니다. 다음으로, 가장 일반적인 버튼 클릭 배경 전환 셀렉터와 같은!
  • XML에서는 @mipmap 또는 @drawable을 통해 Drawable을 직접 설정할 수 있습니다. 예: android:Background = "@mipmap/iv_icon_zhu" / "@drawable/btn_back_selctor" Java 코드에서는 Resource의 getDrawable(R.mipmap.xxx)을 통해 드로어블 리소스를 얻을 수 있습니다. ImageView와 같은 특정 컨트롤의 배경을 설정하는 경우 동일한 방식으로 control.getDratale()을 직접 호출할 수 있습니다. Drawable 객체를 얻을 수 있습니다!
  • Android의 드로어블 리소스 이름에는 제한이 있습니다.
  • [a-z0-9_.](즉, 영숫자와 및 .만 가능) 그리고 숫자로 시작할 수 없습니다. 그렇지 않으면 컴파일에서 오류를 보고합니다: 잘못된 파일 이름: [a-z0-9.]만 포함해야 합니다! 소문자! ! ! ! 소문자! ! ! 소문자! ——중요한 말을 세 번 해보세요~
자, 이제 주목해야 할 점은 바로 안드로이드에서 제공하는 13가지 Drawable에 대해 알아보겠습니다!


1.ColorDrawable

가장 간단한 종류의 Drawable인 ColorDrawable을 Canvas(캔버스)에 그릴 때, 고정된 색상이 페인트를 채우고 캔버스에 단색 영역이 그려집니다!

1) ColorDrawable은 Java에서 정의됩니다:

ColorDrawable drawable = new ColorDrawable(0xffff2200);  
txtShow.setBackground(drawable);

2). 물론 위의 사용법은 실제로는 많이 사용되지 않습니다. res/values ​​디렉토리에 color.xml을 생성하는 경우가 많습니다. 파일에 사용할 색상 값을 쓰고 필요할 때 @color를 통해 해당 값을 가져옵니다. 예:

3) 다음과 같은 color.xml 파일

을 만듭니다.

  <?xml version="1.0" encoding="utf-8"?>  <color  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:color="#FF0000"/>

그런 다음 xml에 있는 경우 파일에서 @color/xxx를 통해 해당 색상 값을 얻을 수 있습니다. Java인 경우:

 <?xml version="1.0" encoding="utf-8"?>  <resources>  
    <color name="material_grey_100">#fff5f5f5</color>
    <color name="material_grey_300">#ffe0e0e0</color>
    <color name="material_grey_50">#fffafafa</color>
    <color name="material_grey_600">#ff757575</color>
    <color name="material_grey_800">#ff424242</color>
    <color name="material_grey_850">#ff303030</color>
    <color name="material_grey_900">#ff212121</color></resources>

ps: 또 한 가지 주의할 점은 Java에서 색상 값을 직접 정의할 경우 0x를 추가해야 하며 투명도도 놓칠 수 없다는 점입니다.

int mycolor = getResources().getColor(R.color.mycolor);    
btn.setBackgroundColor(mycolor);

4) 시스템 정의 색상을 사용하세요.

예: BLACK(검은색), BLUE(파란색), CYAN(청록색), GRAY(회색), GREEN(녹색), RED(빨간색), WRITE(흰색) ) ),노란색(노란색)! 사용법: btn.setBackgroundColor(Color.BLUE);시스템 색상을 가져와서 설정할 수도 있습니다.

int mycolor = 0xff123456;    
btn.setBackgroundColor(mycolor);

xml에서 사용: android:Background="../style/images/black"

5 ). 정적 메소드 argb를 사용하여 색상을 설정합니다.

Android는 int 유형 데이터를 사용하여 색상 값(보통 0x로 시작하는 16진수)을 나타냅니다. 색상 값의 정의는 투명도 알파와 RGB의 세 가지 기본 색상(빨간색, 녹색, 파란색)으로 정의되며 "#"으로 시작하여
Transparency-Red-Green-Blue;예: #RGB #ARGB #RRGGBB # AARRGGBB
각 요소는 바이트(8비트)로 표현되므로 값 범위는 0~255입니다. xml에서 색상을 설정할 때 투명도를 무시할 수 있습니다. 하지만 Java 코드에서는 투명성의 가치를 명확하게 표시해야 합니다. 이때 생략하면 완전한 투명성을 의미합니다. 아무런 효과가 없을 겁니다~ 예를 들어 0xFF0000은 빨간색을 의미하지만 이렇게 직접 쓰면 별거 없고 대신 이렇게 써야 합니다. 0xFFFF0000, 색상 값을 설정하는 Java 코드를 기억하세요. 앞에 투명도를 추가해야 합니다~ 예: (매개변수는 투명도, 빨간색 값, 녹색 값, 파란색 값)txtShow.setBackgroundColor(Color.argb(0xff, 0x00, 0x00, 0x00));


2입니다. NiewPatchDrawable

은 입니다. 9화에서는 앞서 1.6.9(나인시스터즈)화상 플레이 방법을 자세히 설명했습니다. .9 사진 만드는 방법을 알려드릴게요! Android FrameWork는 포인트 9 이미지를 표시할 때 효율적인 방법을 사용합니다. 그래픽 최적화 알고리즘을 사용하면 특별한 처리 없이 적응형 이미지 스트레칭을 달성할 수 있습니다~ 또한 AS 사용 시 다음 사항에 주의해야 합니다.

  • 1. 포인트 9 그림은 Mipmap 디렉터리에 배치할 수 없지만 drawable 디렉터리에 배치해야 합니다!
  • 2. AS의 .9 사진에는 검은색 선이 있어야 합니다. 그렇지 않으면 오늘 아침에 제 사촌 아준이 그룹에서 말했습니다. 소속사 아티스트는 특정 소프트웨어를 사용해 만든 것이라며 검은색 선이 없는 .9 사진을 주고 이클립스로 인쇄했다. 사용 가능합니다.. 9. 젠장 AS로 전환하니 다이렉트 컴파일이 실패하네요! AS식별 같은 느낌이네요 9번째 사진 기준은 블랙샵이나 블랙라인이 있어야 한다는거! 게다가 내 사촌이 검은 선을 제거하는 방법을 알려주었습니다: 9patch (.9) 자신의 그림에서 검은 점/검은 선을 제거하는 방법은 제가 특별히 시도해 본 적이 없습니다. 관심이 있으시면 직접 시도해 보세요. , 그런데 검은 선이 그렇게 거슬리나요? 강박장애는 느껴지지 않아요! 또 다른 점은 다른 사람의 apk를 압축 해제하면 .9 자료를 가져 가면 검은 선이 없다는 것을 알 수 있으며 오류도 발생합니다! 검은 선이 있는 .9 자료를 꺼내려면 직접 압축을 풀지 말고 apk를 디컴파일해야 합니다! ! ! 앞면도 디컴파일 이미 소개했으니 여기서는 자세히 다루지 않겠습니다!

그런 다음 쓸모없는 두 가지를 소개합니다:

xml 정의 NinePatchDrawable:

int getcolor = Resources.getSystem().getColor(android.R.color.holo_green_light);  
btn.setBackgroundColor(getcolor);

비트맵 패키징 사용:

  <!--pic9.xml-->  <!--参数依次为:引用的.9图片,是否对位图进行抖动处理-->  <?xml version="1.0" encoding="utf-8"?>  <nine-patch  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:src="@drawable/dule_pic"  
    android:dither="true"/>

3.ShapeDrawable

Shape Drawable, 기본 기하학적 모양(예: 직사각형, 원, 선 등)을 정의합니다. 루트 요소는 노드가 많으며 관련 노드는 다음과 같습니다.

  • ① < ;shape>:
  • ~ visible: 표시 여부 설정
  • ~ shape: 모양, 선택: 직사각형(직사각형, 정사각형 포함), 타원형(타원, 원 포함), 선 (선분), 링(링)
  • ~ innerRadiusRatio: 모양이 링인 경우에만 유효하며, 링의 내부 반경과 반경의 비율을 나타냅니다. 그는 무시될 것입니다
  • ~ innerRadius: 모양이 고리일 때 유효하며 고리의 내부 반경 크기를 나타냅니다
  • ~ thicknessRatio: 모양이 고리일 때 유효하며 시계의 두께에 대한 비율 ring to the radius
  • ~ Thickness: 모양이 Ring일 때 유효하며, Ring의 두께, 즉 외부 반지름과 내부 반지름의 차이를 나타냅니다
  • ~ useLevel: 모양이 Ring일 때 유효합니다. 링, 레벨
  • ②< ;size>:
  • ~ width: 그래픽 모양 너비
  • ~ height: 그래픽 모양 높이
  • 3< gradient>: GradientDrawable에 대해서는 나중에 이야기합시다~
  • 4<solid > ;
  • ~ color: 배경 채우기 색상, 단색 설정은 그라데이션으로 설정된 모든 효과를 덮어씁니다!!!!!!
  • ⑤< ;Stroke>
  • ~ width: 테두리의 너비
  • ~ color: 테두리의 색상
  • ~ dashWidth: 테두리의 점선 세그먼트 길이
  • ~ dashGap : 테두리의 점선 부분의 간격
  • ⑥<conner>
  • ~ radius : 둥근 모서리 반경, 위쪽, 아래쪽, 왼쪽 및 오른쪽 모서리에 적용 가능
  • ~ topLeftRadius, topRightRadius, BottomLeftRadius, tBottomRightRadius: 둥근 모서리 값은 순서대로 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래입니다.
  • 7<padding>
  • 왼쪽, 위쪽, 오른쪽, 아래쪽m. : 왼쪽 위, 오른쪽, 아래쪽, 위쪽 여백 순서입니다!

사용 예: 2.3.1 TextView(텍스트 상자)에 대한 자세한 설명

2.png


4.GradientDrawable

A Drawable 선형 그래디언트, 발산 그래디언트 및 타일형 그래디언트 효과를 얻을 수 있는 그래디언트 영역 포함 핵심 노드: <gradient/>, 다음과 같은 선택적 속성 포함:

  • startColor: 그라데이션의 시작 색상
  • centerColor: 그라데이션의 중간 색상
  • endColor: 그라데이션의 끝 색상
  • type: 그라데이션 유형, 선택 사항(linear , radial , sweep), 선형 그래디언트(그라디언트 각도 설정 가능), 발산형 그래디언트(가운데에서 모든 측면으로 발산), 타일드 그래디언트
  • centerX: 중앙의 Arthur의 x 좌표 그래디언트, 값 범위: 0~ 1
  • centerY: 그래디언트 중간 색상의 Y 좌표, 값 범위: 0~1
  • angle: 선형 유형 그래디언트만 유효하며 그래디언트를 나타냅니다. 각도는 45
  • gradientRadius의 배수여야 합니다. : 방사형 및 스윕 유형 그라데이션만 유효합니다. 방사형은 그라데이션 효과의 반경을 나타내도록 설정해야 합니다.
  • useLevel: 그라데이션 효과를 그릴지 여부를 결정합니다.

코드 예: (세 가지 그라데이션 효과 시연):

렌더링 실행:

3.png

먼저 드로어블 아래에 세 개의 그라데이션 xml 파일을 만듭니다.

(선형 그라데이션)gradient_linear .xml :

<!--pic9.xml-->  <!--参数依次为:引用的.9图片,是否对位图进行抖动处理-->  <?xml version="1.0" encoding="utf-8"?>  <bitmap  
    xmlns:android="http://schemas.android.com/apk/res/android"  
    android:src="@drawable/dule_pic"  
    android:dither="true"/>

(divergent gradient) gradient_radial.xml :

<?xml version="1.0" encoding="utf-8"?><shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <gradient
        android:angle="90"
        android:centerColor="#FFEB82"
        android:endColor="#35B2DE"
        android:startColor="#DEACAB" />

    <stroke
        android:dashGap="5dip"
        android:dashWidth="4dip"
        android:width="3dip"
        android:color="#fff" /></shape>
(tile gradient) gradient_sweep.xml

:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dip"
    android:shape="ring"
    android:thickness="70dip"
    android:useLevel="false" >

    <gradient
        android:centerColor="#FFEB82"
        android:endColor="#35B2DE"
        android:gradientRadius="70"
        android:startColor="#DEACAB"
        android:type="radial"
        android:useLevel="false" /></shape>
call 3 개의 drawables

Activity_main.xml

:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadiusRatio="8"
    android:shape="ring"
    android:thicknessRatio="3"
    android:useLevel="false" >

    <gradient
        android:centerColor="#FFEB82"
        android:endColor="#35B2DE"
        android:startColor="#DEACAB"
        android:type="sweep"
        android:useLevel="false" /></shape>
okay, 그것은 간단합니다. ~ 물론, 좀 더 복잡한 그래픽을 그리려면 xml 파일만으로는 부족합니다. 더 복잡한 효과는 Java 코드를 통해 완성해야 합니다. 다음 데모는 인터넷에서 가져온 소스 코드입니다.

Running renders:

Implementation code

:

MainActivity.java

:

 <LinearLayout 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:orientation="vertical">

    <TextView
        android:id="@+id/txtShow1"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:background="@drawable/gradient_linear" />

    <TextView
        android:id="@+id/txtShow2"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="@drawable/gradient_radial" />

    <TextView
        android:id="@+id/txtShow3"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@drawable/gradient_sweep" /></LinearLayout>

코드는 다음과 같습니다. ShapeDrawable 및 PathEffect를 사용하면 전자는 다음을 포함한 일반 그래픽의 래퍼입니다. ArcShape, OvalShape, PathShape, RectShape, RoundRectShape!
PathEffect는 CornerPathEffect, DashPathEffect 및 DiscretePathEffect를 포함한 경로 효과입니다. 복잡한 그래픽 테두리를 만들 수 있습니다...

이 GradoemtDrawable 그래디언트에 대한 내용은 여기까지입니다. 마지막 항목에 관심이 있다면 다음으로 이동하세요. appium/android-apidemos

이 섹션 요약:

좋습니다. , 이 섹션에서는 먼저 ColorDrawable, NiewPatchDrawable, ShapeDrawable, GradientDrawable

네 가지 Drawable을 학습합니다. 물론 이것들은 이전에 작성된 볶음밥이지만 튜토리얼의 완성도를 높이기로 결정했습니다. 다시 작성해 보세요~ 게다가 기본 튜토리얼 작성 후 이전에 작성했던 일부 블로그는 삭제됩니다! 4.jpg