비트맵과 드로어블의 차이점

신문

사실 최근 들어 많은 일들이 일어나고 있는 것 같은데, 점심이나 저녁 쉬는 시간, 심지어 프로젝트를 편집하는 중에도 많은 블로그가 작성됩니다. 솔직히 요즘에는 그렇게 많은 시간을 잘 활용하지 못하지만 단편적인 시간을 잘 활용할 수 있다는 생각이 듭니다.

제 일상 얘기를 해보자면, 저는 아직도 팬 쫓아다니는 걸 좋아해요. 제가 팬 쫓아다닌다고 자주 얘기하면 다들 고개를 저으며 팬들 쫓아다니는 게 너무 힘들다고 하더라고요. 특히 대본이 매우 잘 쓰여진 애니메이션의 경우, 항상 적절한 위치에서 긴장감을 느끼게 하여 다음 회를 기대하게 만듭니다. ".

저는 그냥 재미삼아 블로거일 뿐이라고 거듭 강조했는데, 헛소리를 너무 많이 해서 웃어넘기시는 분들이 늘 계시더라구요~ 제 모든 블로그는 각종 학습영상과 책들을 요약한 것입니다. .

텍스트

이번에는 Bitmap과 Drawable의 차이점에 대해 이야기해보겠습니다. 우선 이 두 가지가 무엇인지부터 알아야 할 것 같은데요? 사실 컴퓨터 분야의 많은 것들은 이름으로 직접 정의할 수 있기 때문에 이름 짓는 것도 일종의 지식인 경우가 많습니다.큰 놈들의 이름 짓는 습관을 보면 많은 것을 배울 수 있습니다. 바보는 단순한 것을 복잡하게 만드는 데 능숙하고, 천재는 복잡한 것을 단순하게 만드는 데 능숙하다는 말이 있지 않나요? 이것이 단순성의 원리입니다. 네이밍을 신중하게 하지 않으면 철자 오류 등 후유증이 많이 나는 경우가 많으며, 나중에 누군가 메소드 이름을 바꾸고 싶다면 코드 리뷰 과정에서 더 많은 파일과 메소드를 검토하기 위해 추가적인 노력을 기울여야 할 것이다.

비트맵은 픽셀로 구성된 그림 정보인 비트맵으로 번역됩니다. Drawable은 "drawable"로 번역됩니다. 즉, Drawable은 뷰의 그리기 프로세스를 정의합니다(View와 다소 유사).

그래서 사실 Drawable과 Bitmap 사이에는 실제로 꼭 필요한 연결은 없고 단지 우리가 평소 Drawable을 사용하다 보면 그림을 그리는 장면이 많아 둘이 '진짜 원숭이와 가짜 원숭이'처럼 되는 것입니다. 왕" , 점차 구별하기 어려워집니다.

Android 소스 코드에서 이 두 클래스의 정의를 살펴볼 수 있습니다.

비트맵:

public final class Bitmap implements Parcelable

Bitmap 클래스는 공식적으로 상속을 지원하지 않습니다. 즉, 사용자 정의 Bitmap을 지원하지 않는다는 것을 알 수 있습니다. 왜냐하면 Bitmap은 이미지와 관련된 정보만 저장하는 Kotlin의 Data 클래스와 더 비슷하기 때문입니다.

그리기 가능:

public abstract class Drawable

Drawable의 경우 공식이 이를 추상 클래스로 설정하고 공식이 많은 구현을 제공했음을 알 수 있습니다.여기에 이미지 설명을 삽입하세요.

가장 일반적인 것은 아마도 BitmapDrawable일 것입니다. 우리가 Bitmap과 Drawable 사이의 상호 변환이라고 부르는 것은 실제로 Bitmap과 BitmapDrawable 사이의 상호 변환입니다. Drawable은 비트맵의 관련 정보를 읽은 다음 구성된 매개변수에 따라 대상 뷰에 그립니다.

드로어블을 맞춤설정하는 방법을 살펴보겠습니다.

new Drawable(){
    
    
            private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            @Override
            public void draw(@NonNull Canvas canvas) {
    
    
                //Todo:draw something...基于实际需求,根据Paint和设置的属性来进行绘制
            }

            @Override
            public void setAlpha(int i) {
    
    
                paint.setAlpha(i);//设置绘制视图的透明度
            }

            @Override
            public void setColorFilter(@Nullable ColorFilter colorFilter) {
    
    
                paint.setColorFilter(colorFilter);
            }

            @Override
            public int getOpacity() {
    
    
                //简单的Demo,复杂视图该参数并不能简单如此设置
                if(getAlpha() == 0) return PixelFormat.TRANSPARENT;
                if(getAlpha() == 1) return PixelFormat.OPAQUE;
                else return  PixelFormat.TRANSLUCENT;
            }
        };

이렇게 많이 말했지만 Drawable을 사용자 정의하면 무슨 소용이 있을까요? 사실 재사용과 성능 문제는 여전히 흔한 문제입니다.

앞서 언급했듯이 Drawable의 역할은 그리기 프로세스를 캡슐화하는 것입니다. 뷰에서 반복되는 그리기 로직을 ​​Drawable로 캡슐화하면 반복되는 코드와 뷰 그리기의 수준을 줄일 수 있습니다.

awable의 기능은 그리기 프로세스를 캡슐화하는 것입니다. 뷰에서 반복되는 그리기 로직을 ​​Drawable로 캡슐화하면 반복되는 코드와 뷰 그리기의 수준을 줄일 수 있습니다.

Guess you like

Origin blog.csdn.net/qq_31433709/article/details/131174664