Android Drawable 필수 지식 소결
먼저 Drawable 은 Canvas 에서 그 릴 수 있 는 그림 을 나타 내 는 추상 적 인 클래스 로 view 의 배경 으로 자주 사용 되 며 다양한 실현 클래스 가 서로 다른 기능 을 수행 합 니 다.그 다음 에 Drawable 은 크게 다음 과 같은 몇 가지 로 나 눌 수 있다.그림,색채 로 구 성 된 이미지 이다.일반적으로 xml 로 정의 합 니 다.
Drawable 의 계승 시스템
Drawable 구현 클래스 및 태그
Drawable
내부 폭 높 은 획득
getIntrinsicHeight、getIntrinsicWidth
- Drawable 이 그림 으로 구성 되 었 을 때 방법 은 그림 의 너비 와 높이 를 되 돌려 줍 니 다.
- Drawable 이 색상 으로 구성 되 어 있 을 때 너비 와 높이 개념 없 이 되 돌아 가기-1
각종 Drawable 및 그 용법
BitmapDrawable
그림 을 표시 하 는 데 사용 합 니 다.다음 예제 입 니 다.
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:antialias="true"
android:dither="true"
android:filter="true"
android:gravity="top"
android:src="@mipmap/girl"
android:tileMode="repeat" />
상용 속성android:antialias 톱날 저항 오픈 여부
android:dither 디 더 링 방지 오픈 여부
android:filter 필터 효과 오픈 여부
안 드 로 이 드:gravity 는 그림 을 찾 는 데 사 용 됩 니 다.
android:src 이미지 자원 id
android:tileMode 평평 한 포장 모드,repeat,mirror,clamp 세 가지
ColorDrawable
단색 으로 그 릴 수 있 는 구역 을 대표 하고 고정된 색 을 포장 하여 캔버스 에 단색 구역 을 그립 니 다.
예시:
<?xml version="1.0" encoding="utf-8"?>
<color xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/colorAccent">
</color>
코드 로 도 만 들 수 있어 요.ColorDrawable drawable = new ColorDrawable(int color); //color 의 integer 값 을 입력 합 니 다.
NinePatchDrawable
즉 9-patch 그림 은 내용 에 따라 너비 와 높이 를 자 유 롭 게 조정 할 수 있 습 니 다.
예시:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
android:dither="true"
android:filter="true"
android:src="@color/colorAccent">
</nine-patch>
draw9patch 로 크기 조정 영역 설정그림 에서 1,2 방향 은 draw9patch 에서 검 은 선 을 그립 니 다.검 은 선 길 이 는 늘 어 날 수 있 는 범위 로 교차 합 니 다.
그림 에서 3,4 방향 검 은 선 길이 의 교 집합 은 내용 이 채 울 수 있 는 구역 을 나타 낸다.
ShapeDrawable
색 채 를 통 해 도형 을 구성 하면 단색 도형 일 수도 있 고 그 라 데 이 션 효 과 를 가 진 도형 일 수도 있다.구성 할 수 있 는 도형 은 rectangle,oval,ring,line 이 있다.
그 라 데 이 션 효과 가 있 는 원 예제:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient
android:angle="45"
android:centerColor="@color/colorAccent"
android:centerX="50%"
android:centerY="50%"
android:endColor="@color/colorPrimary"
android:gradientRadius="150dp"
android:startColor="@color/colorPrimaryDark"
android:type="sweep" />
<size
android:width="260dp"
android:height="260dp" />
</shape>
메모:1.Android:angle 값 은 45 의 배수 2,oval 로 타원 을 그립 니 다.size 의 너비 와 높이 가 같 을 때 원 으로 그립 니 다.라운드 예시:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadius="100dp"
android:shape="ring"
android:thickness="10dp"
android:useLevel="false" >
<stroke
android:width="10dp"
android:color="@color/colorAccent" />
</shape>
주:1.android:useLevel 을 false 로 설정 합 니 다.그렇지 않 으 면 이상 적 인 효 과 를 표시 할 수 없습니다.
2.innerRadius 는 원 환 내 반지름 이 고 innerRadiusRation 은 내 반지름 이 원 환 너비 의 비율 을 차지 하 며 이들 은 innerRadius 를 위주 로 한다.
3.thickness 는 링 의 너비 이 고 thickness Ratio 는 이 너비 가 링 너비 의 비율 을 차지 하 며 thickness 를 위주 로 한다.
상용 속성
-android:shape 가 그 릴 모양,rectangle,oval,ring,line
-
- android:width 테두리 너비
- android:color 테두리 색상
- android:dashGap 점선 너비 그리 기
- android:dashWidth 점선 의 선분 간격 그리 기(점선 을 그 리 려 면 둘 다 0 이 될 수 없습니다)
-
-
- android:angle 그 라 데 이 션 각도,45 배수 여야 합 니 다.
- android:startColor 그 라 데 이 션 의 시작 색
- android:centerColor 그 라 데 이 션 의 중간 색상
- android:endColor 그 라 데 이 션 의 끝 색
- android:centerX 그 라 데 이 션 의 중심 점 가로 좌표
- android:centerY 그 라 데 이 션 의 중심 점 세로 좌표
- android:gradientRadius 그 라 데 이 션 반경
- android:type 그 라 데 이 션 유형,linear(선형),sweep(스 캔),radial(직경 방향)
-
- android:topLeft Radius,android:topRightRadius,android:bottomLeft Radius,android:bottomRightRadius 는 각각 왼쪽 상단,오른쪽 상단,왼쪽 하단,오른쪽 하단 의 각 도 를 설정 합 니 다.
- android:radius 는 사각 에 같은 각 도 를 설정 하고 우선 순위 가 낮 으 며 다른 네 개의 속성 으로 덮어 씁 니 다.
-
- shape 기본 너비 없 음,getIntrinsicHeight,getIntrinsicWidth 반환-1
- size 를 통 해 너비 와 높이 를 설정 할 수 있 지만 view 배경 으로 늘 어 나 거나 view 크기 로 줄 어 듭 니 다.
-
StateListDrawable
상태 선택 기로 볼 수 있 습 니 다.view 의 서로 다른 상 태 를 통 해 해당 하 는 item 의 drawable 디 스 플레이 를 선택 하 십시오.
예시:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorPrimaryDark" android:state_pressed="false"></item>
<item android:drawable="@color/colorAccent" android:state_pressed="true"></item>
</selector>
흔 한 상태android:state_pressed 뷰 를 누 를 때 누 른 상태
android:state_checked view 가 선택 되 었 을 때 CheckBox 에 적 용 됩 니 다.
android:state_selected view 가 선택 되 었 을 때
android:state_enabled view 가 사용 가능 한 상태 에 있 을 때
android:state_focused 뷰 에서 초점 가 져 오기
LayerDeawable
이것 은 층 을 나 누 는 Drawable 집합 을 나타 내 는데 ps 의 그림 과 같은 개념 으로 여러 개의 drawable 을 서로 다른 층 위 에 놓 아 중첩 효 과 를 형성한다.
예시:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/night" />
<item
android:drawable="@mipmap/photo6"
android:gravity="center" />
</layer-list>
주의사항:1.layer-list 는 여러 개의 item 을 포함 할 수 있 습 니 다.각 item 은 drawable 을 표시 하고 추 가 된 item 은 이전에 추 가 된 item 에 덮어 씁 니 다.
2.기본 적 인 상황 에서 layer-list 의 모든 drawable 은 view 크기 로 크기 를 조정 합 니 다.시설 android:gravity 를 통 해 크기 조정 효 과 를 조절 할 수 있 습 니 다.
3.상하 좌우 오프셋 을 설정 할 수 있 습 니 다.android:top,android:bottom,android:left,android:right
LevelListDrawable
drawable 집합 을 표시 합 니 다.집합 에 있 는 모든 Drawable 은 하나의 등급(level)이 있 습 니 다.서로 다른 등급 을 설정 하면 LevelList Drawable 을 다른 Drawable 로 전환 할 수 있 습 니 다.레벨 범 위 는 0~10000 사이,android:maxLevel 최대 level,android:minLevel 최소 level 설정
예시:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@mipmap/photo0"
android:maxLevel="20"
android:minLevel="10" />
<item
android:drawable="@mipmap/photo1"
android:maxLevel="40"
android:minLevel="30" />
</level-list>
level 설정 을 통 해 코드 에서 다른 Drawable 로 전환 할 수 있 습 니 다.
// ImageView photo1, 35 30~40
iv.setImageLevel(35);
// ImageView photo0, 15 10~20
iv.setImageLevel(15);
TransitionDrawableLayer Deawable 의 하위 클래스 로 Drawable 의 페 이 드 아웃 효 과 를 실현 합 니 다.
예시:
xml 파일 정의
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/night" />
<item android:drawable="@mipmap/photo6" />
</transition>
ImageView 에 src 를 설정 합 니 다.자바 코드 에 있 습 니 다.
iv= (ImageView) findViewById(R.id.iv_transition);
drawable = (TransitionDrawable) iv.getDrawable();
drawable.startTransition(1000); //
drawable.reverseTransition(1000);
InsetDrawable다른 Drawable 을 삽입 하고 주변 에 일정한 간격 을 유지 할 수 있 습 니 다.
예시:
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/photo6"
android:inset="20dp">
</inset>
ScaleDrawable레벨 에 따라 Drawable 을 일정 비율 로 크기 조정 합 니 다.level 이 0 일 때 보이 지 않 고 level 이 10000 일 때 크기 조정 효과 가 없습니다.
예시:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/night"
android:scaleGravity="center"
android:scaleHeight="50%"
android:scaleWidth="50%" />
효 과 를 표시 하려 면 level 이 0 이상 설정 해 야 합 니 다.
iv = (ImageView) findViewById(R.id.iv_scale);
ScaleDrawable drawable= (ScaleDrawable) iv.getDrawable();
drawable.setLevel(1);
-android:scaleHeight="percentage",android:scaleWidth="percentage",너비 와 높이 크기 를 원래 의 비율 로 설정(100%-percentage)-level 설정 이 클 수록 이미지 표시 가 커 짐
ClipDrawable
자신의 레벨(level)에 따라 다른 Drawable 을 재단 합 니 다.재단 의 방향 은 android:clipOrientation,android:gravity 가 공동으로 결정 합 니 다.level 을 설정 하여 재단 합 니 다.level 의 크기 는 0 에서 10000,level 이 0 일 때 전혀 표시 되 지 않 고 10000 일 때 완전히 표 시 됩 니 다.
xml 정의
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:clipOrientation="horizontal"
android:drawable="@mipmap/night"
android:gravity="right"></clip>
<ImageView
android:id="@+id/iv_clip"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/drawable_clip" />
level 설정 으로 재단 하기
ImageView iv = (ImageView) findViewById(R.id.iv_clip);
ClipDrawable drawable= (ClipDrawable) iv.getDrawable();
drawable.setLevel(5000); // level
속성android:clipOrientation,수평 수평 방향 재단,수직 방향 재단
안 드 로 이 드:gravity,재단 방향 에 맞 춰
사용자 정의 Drawable
사용자 정의 원형 Drawable
package com.yu.drawablelearing;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
public class CircleDrawable extends Drawable{
private int radius;
private int mWidth;
private int mHeight;
private Paint mPaint;
@Override
public void draw(Canvas canvas) {
canvas.drawCircle(mWidth/2,mHeight/2,radius,mPaint);
}
public CircleDrawable(Bitmap bitmap) {
radius = Math.min(bitmap.getWidth(), bitmap.getHeight())/2;
mWidth = bitmap.getWidth();
mHeight = bitmap.getHeight();
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint = new Paint();
mPaint.setShader(bitmapShader);
mPaint.setAntiAlias(true);
}
@Override
public void setAlpha(int alpha) {
mPaint.setAlpha(alpha);
invalidateSelf();
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
mPaint.setColorFilter(colorFilter);
invalidateSelf();
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public int getIntrinsicHeight() {
return mHeight;
}
@Override
public int getIntrinsicWidth() {
return mWidth;
}
}
원 각 이 있 는 사각형 Drawable 사용자 정의
package com.yu.drawablelearing;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.drawable.Drawable;
/**
* Created by pecu on 2016/08/24.
*/
public class RoundRectangleDrawable extends Drawable {
private RectF rectF;
private Paint mPaint;
Bitmap mBitmap;
@Override
public void draw(Canvas canvas) {
canvas.drawRoundRect(rectF, mBitmap.getWidth()/6,mBitmap.getHeight()/6, mPaint);
}
public RoundRectangleDrawable(Bitmap bitmap) {
mBitmap = bitmap;
mPaint = new Paint();
BitmapShader bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setAntiAlias(true);
mPaint.setShader(bitmapShader);
}
@Override
public void setAlpha(int alpha) {
mPaint.setAlpha(alpha);
invalidateSelf();
}
@Override
public void setColorFilter(ColorFilter colorFilter) {
mPaint.setColorFilter(colorFilter);
invalidateSelf();
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
rectF = new RectF(left, top, right, bottom);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public int getIntrinsicWidth() {
return mBitmap.getWidth();
}
@Override
public int getIntrinsicHeight() {
return mBitmap.getHeight();
}
}
사용자 정의 Drawable 의 일반적인 절차1. 사용자 정의 Drawable 클래스 계승
2. getOpacity,setColorFilter,setAlpha 등 을 실현 하 는 방법
3. onDraw 방법 에서 그리 기
4. 사용자 정의 Drawable 에 고정된 크기 가 있다 면 getIntrinsic Width,getIntrinsic Height 방법 을 실현 해 야 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.