Android 2부의 13개 드로어블 요약


,

이 섹션 소개:

이 섹션에서는 Android의 Drawable 리소스에 대해 계속해서 알아봅니다.
ColorDrawable;
ShapeDrawable;
GradientD raw !
드로어블 4개~ 이 섹션에서는 BitmapDrawable
;
ClipDrawable;
AnimationDrawable!
; 여전히 13가지 유형의 Drawable Map을 게시하고 있습니다:
좋아, 이 섹션을 시작하자~

1.BitmapDrawable

1.pngBitmap의 일종의 캡슐화로, 다음을 포함하여 BitmapDrawable 영역에 래핑되는 비트맵의 그리기 방법을 설정할 수 있습니다. 타일 ​​채우기, 채우기 늘리기 또는 이미지의 원래 크기 유지 <

bitmap

> 선택적 속성은 다음과 같습니다.


src

: 그림 리소스 ~

antialias: 앤티앨리어싱 지원 여부

  • filter: 비트맵 필터링 지원 여부, 지원되면 이미지를 더 많이 표시할 수 있습니다. 원활하게
  • dither: 비트맵 디더링 여부
  • gravity: 비트맵이 컨테이너보다 작은 경우 컨테이너에서 비트맵의 상대적 위치를 설정할 수 있습니다
  • tileMode: 모드를 지정합니다. 이미지 타일 채우기 컨테이너, 이를 ​​설정하면 중력 속성이 무시되고 다음과 같은 선택적 값이 있습니다: disabled
  • (전체 패턴이 늘어나고 타일링됨),
  • clamp(원본 이미지 크기), repeat
  • (타일링됨) ),
  • mirror(거울 타일) )해당 렌더링:
  • 1XML 정의 BitmapDrawable
:

<?xml version="1.0" encoding="utf-8"?>  
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"  
    android:dither="true"  
    android:src="@drawable/ic_launcher"  
    android:tileMode="mirror" />

2동일한 효과를 얻기 위한 Java 코드4.png:

BitmapDrawable bitDrawable = new BitmapDrawable(bitmap);  
bitDrawable.setDither(true);  
bitDrawable.setTileModeXY(TileMode.MIRROR,TileMode.MIRROR);

2.InsetDrawable

Drawable을 다른 Drawable 내부에 삽입하고 내부에 약간의 간격을 두는 것을 의미합니다. Drawable의 padding 속성과 비슷하지만

paddingDrawable의 콘텐츠와 Drawable 자체

사이의 여백을 나타냅니다. 그리고
InsetDrawable

은 컨트롤에 필요한

배경이 실제 테두리보다 클 때
두 개의 Drawable과 컨테이너 사이의 여백

을 나타냅니다. 제가 어렸을 때는 InsetDrawable을 사용하는 것이 더 적합했습니다. 예를 들어 이를 사용하면 사용자 정의 대화 상자와 화면 사이의 문제를 해결할 수 있습니다. 간격 문제입니다. 레이아웃_마진을 설정해도 쓸모가 없다는 것을 해본 친구들은 알고 있을 것입니다. 이 InsetDrawable은 언제든지 사용할 수 있습니다. InsetDrawable에 대해 insetXxx를 설정하고 다르게 설정하면 됩니다. 방향으로 여백을 설정한 후 Dialog의 배경으로 설정하세요! 관련 속성은 다음과 같습니다.

  • 1.drawable: 참조된 Drawable은 비어 있는 경우 Drawable 유형의 하위 노드를 가져야 합니다!
  • 2.visible: Drawable에 공간
  • 3.insetLeft,insetRight이 있는지 여부를 설정합니다. , insetTop, insetBottm: 왼쪽, 오른쪽, 위쪽 및 아래쪽 여백 설정

① XML에 사용됨 :

<?xml version="1.0" encoding="utf-8"?>  
<inset xmlns:android="http://schemas.android.com/apk/res/android"  
    android:drawable="@drawable/test1"  
    android:insetBottom="10dp"  
    android:insetLeft="10dp"  
    android:insetRight="10dp"  
    android:insetTop="10dp" />

Java 코드에 사용됨 :

InsetDrawable insetDrawable = new InsetDrawable(getResources()  
        .getDrawable(R.drawable.test1), 10, 10, 10, 10);

렌더링 사용 :

2.png

3.ClipDrawable

Clip은 잘라내기로 번역될 수 있습니다. ClipDrawable은 비트맵에서 일부를 잘라내는 것으로 이해할 수 있습니다. Android의 진행률 표시줄은 설정된 레벨 값에 따라 클리핑을 결정하는 ClipDrawable을 사용하여 구현됩니다. 영역의 크기, 루트 노드는 <clip>

관련 속성은 다음과 같습니다:

  • clipOrietntion: 클리핑 방향을 설정합니다. 가로 및 세로를 설정할 수 있습니다. 방향
  • gravity : 해당 위치에서 자르기 시작
  • drawable: 참조된 Drawable 리소스, 비어 있는 경우 Drawable 유형의 하위 노드가 있어야 함 ps: 이 Drawable 유형의 하위 노드: <clip>:이 방법으로 해당 문을 추가하면 됩니다...

Usage example:

Core: 코드를 통해 ClipDrawable의 레벨 값을 수정하세요! 레벨의 값은 0~10000 입니다!

렌더링 실행:

3.png

코드 구현:

①ClipDrawable 리소스 xml 정의:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:clipOrientation="horizontal"
    android:drawable="@mipmap/ic_bg_meizi"
    android:gravity="left" />

②activity_main 기본 레이아웃 파일에 ImageView를 설정하고 src를clipD rawable로 설정하세요! 기억하세요 src입니다. blackground로 쓰면 null 포인터가 보고됩니다!!!

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

    <ImageView
        android:id="@+id/img_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/clip_bg" />

</LinearLayout>

3MainActivity.java는 setLevel:

public class MainActivity extends AppCompatActivity {

    private ImageView img_show;
    private ClipDrawable cd;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                cd.setLevel(cd.getLevel() + 500);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        // 核心实现代码
        cd = (ClipDrawable) img_show.getDrawable();
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(0x123);
                if (cd.getLevel() >= 10000) {
                    timer.cancel();
                }
            }
        }, 0, 300);
    }
}

을 통해 차단 영역 크기를 설정합니다. 흥미롭네요. 묻지 마세요. 여자 사진 구하는 방법은 바이두에 많아요~


4.RotateDrawable

은 Drawable을 회전하는데 사용되며, 회전도 setLevel을 통해 제어됩니다. 최대값도 10000

입니다. 관련 속성은 다음과 같습니다

  • fromDegrees: 시작 각도, 가장 낮은 레벨 값에 해당, 기본값은 0
  • toDegrees: 끝 각도, 가장 높은 레벨 값에 해당, 기본값 360
  • pivotX: x의 설정 참조점 좌표, 값은 0~1, 기본값은 50%, 즉 0.5
  • pivotY: 참조점의 Y 좌표를 설정합니다. 값은 0~1, 기본값은 50%입니다. 0.5이다 ps: 회전된 이미지가 완전히 표시되지 않으면 위의 두 값을 수정하여 해결할 수 있습니다!
  • drawable: 비트맵 리소스 설정
  • visible: 드로어블 표시 여부 설정!
각도 다이어그램은 다음과 같습니다.
:

1.jpg사용 예

:

렌더링 실행

:

1.jpg코드 구현

:

조금만 수정하세요. 세 번째의 clipsDrawable point!

①회전 Drawable 정의 리소스 파일

:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@mipmap/ic_launcher"
    android:fromDegrees="-180"
    android:pivotX="50%"
    android:pivotY="50%" />
②activity_main.xml에서 위의 drawable을 가리키도록 src를 수정합니다. . AnimationDrawable

이 섹션의 마지막 Drawable인 AnimationDrawable은 일련의 애니메이션을 결합하는 Android 중간 프레임 애니메이션을 구현하는 데 사용됩니다. 특정 순서로 프레임별로 재생되는 그리기 가능한 애니메이션은 전통적인 트위닝 애니메이션, 패닝, 확대/축소 및 기타 효과. 그러나 여기서는 알파, 스케일에 대한 프레임 애니메이션을 구현하기 위해 이 AnimationDrawable만 소개합니다. 번역, 회전 등은 애니메이션 장에서 자세히 소개하겠습니다~여기에서는 <animation-list

>를 루트 노드로 사용합니다

관련 속성 메서드

:

oneshot

: 루프 재생 여부를 설정합니다. false는 루프 재생을 의미합니다.
duration

: 프레임 간격 시간, 일반적으로 300밀리초로 설정합니다. AnimamtionDrawable 인스턴스를 얻은 후에는 start() 메서드를 호출하여 애니메이션을 재생해야 합니다. OnCreate() 메서드에서 호출하면 뷰가 아직 초기화를 완료하지 않았기 때문에 아무런 효과가 없습니다. 간단한 핸들러를 사용하여 애니메이션 재생을 지연시키는 방법도 있습니다. 다음 링크를 참조하세요. Android AnimationDrawable을 실행하는 여러 방법 AnimationDrawable을 사용하여 프레임 애니메이션을 구현하는 것이 정말 매우 편리합니다~

사용 예

: 렌더링 실행:

코드 구현

:

먼저 AnimationDrawable

의 xml 리소스 파일을 정의합니다1.jpg:

public class MainActivity extends AppCompatActivity {

    private ImageView img_show;
    private RotateDrawable cd;
    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if (msg.what == 0x123) {
                if (cd.getLevel() >= 10000)
                    Toast.makeText(MainActivity.this, "转完了~",
                            Toast.LENGTH_LONG).show();
                cd.setLevel(cd.getLevel() + 400);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        img_show = (ImageView) findViewById(R.id.img_show);
        // 核心实现代码
        cd = (RotateDrawable) img_show.getDrawable();
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(0x123);
                if (cd.getLevel() >= 10000) {
                    timer.cancel();
                }
            }
        }, 0, 100);
    }
}

②activity_main.xml이 src를 설정한 다음 MainActivity에서:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading01"
        android:duration="100" />

    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading02"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading03"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading04"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading05"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading06"
        android:duration="100" />

</animation-list>

아, 정말 간단해요. 나중에 프레임 애니메이션을 사용해야 할 때 AnimationDrawable을 직접 사용하면 됩니다. 물론 제어가 필요하지 않은 프레임 애니메이션에만 적합합니다. 예를 들어 위의 내용은 슈퍼 테이블을 아래로 당겨서 새로 고칠 때의 진행률 표시줄 자료입니다. 간단한 프레임 애니메이션이 만들어졌습니다! 필요에 따라 직접 확장해보세요~


이 섹션 요약:

이 섹션에서는 또 다른 5개의 Drawable을 소개합니다. 흥미롭지 않나요? 히히 그게 다예요. 그리고 방금 한 독자가 저에게 이전 글을 삭제하지 말라고 비공개 메시지를 보냈습니다. 이것과 유사한 부분 등 일부 중복된 부분만 삭제하세요~ 물론 백업도 할게요! 삭제된 글은 백업됩니다~ 그러니 걱정하지 마세요!