안 드 로 이 드 가 이미지 중첩 효 과 를 실현 하 는 두 가지 방법
효과 그림:
첫 번 째 종류:
두 번 째:
첫 번 째 는 canvas 를 통 해 그 려 진 효과 입 니 다.
public void first(View v) {
// Immutable bitmap passed to Canvas constructor
Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(),
R.drawable.apple).copy(Bitmap.Config.ARGB_8888, true);
Bitmap bitmap2 = ((BitmapDrawable) getResources().getDrawable(
R.drawable.go)).getBitmap();
Bitmap newBitmap = null;
newBitmap = Bitmap.createBitmap(bitmap1);
Canvas canvas = new Canvas(newBitmap);
Paint paint = new Paint();
int w = bitmap1.getWidth();
int h = bitmap1.getHeight();
int w_2 = bitmap2.getWidth();
int h_2 = bitmap2.getHeight();
paint.setColor(Color.GRAY);
paint.setAlpha(125);
canvas.drawRect(0, 0, bitmap1.getWidth(), bitmap1.getHeight(), paint);
paint = new Paint();
canvas.drawBitmap(bitmap2, Math.abs(w - w_2) / 2,
Math.abs(h - h_2) / 2, paint);
canvas.save(Canvas.ALL_SAVE_FLAG);
//
canvas.restore();
image.setImageBitmap(newBitmap);
}
Canvas canvas = new Canvas(newBitmap); new Bitmap 으로 Canvas 를 만 들 었 을 때 이 그림 에서 작업 이 이 루어 졌 습 니 다.이 예 는 플레이어 가 재생 을 시작 하 는 효과 로 중간 위 치 를 계산 하고 투명 한 회색 정사각형 을 덮어 중간 에 자신 이 재생 하 는 단 추 를 그 리 는 것 이 라 고 할 수 있다.
두 번 째 는 시스템 을 사용 하 는 LayerDrawable 류 입 니 다.이 종 류 는 주로 여러 그림 의 결합 을 제어 하 는 데 사 용 됩 니 다.
public void second(View v) {
Bitmap bitmap1 = ((BitmapDrawable) getResources().getDrawable(
R.drawable.apple)).getBitmap();
Bitmap bitmap2 = ((BitmapDrawable) getResources().getDrawable(
R.drawable.go)).getBitmap();
Drawable[] array = new Drawable[2];
array[0] = new BitmapDrawable(bitmap1);
array[1] = new BitmapDrawable(bitmap2);
LayerDrawable la = new LayerDrawable(array);
// , left、top、right bottom
la.setLayerInset(0, 0, 0, 0, 0);
la.setLayerInset(1, 20, 20, 20, 20);
image.setImageDrawable(la);
}
관련 배열 array,각 층 의 위 치 를 제어 합 니 다.메모:Immutable bitmap passed to Canvas constructor 오류 방지
이 유 는 copy 방법 을 사용 하지 않 으 면 자원 파일 을 직접 참조 하여 수정 할 수 있 으 며,Android 는 코드 에서 res 파일 의 그림 을 수정 할 수 없 기 때 문 입 니 다.
layer-list 는 여러 그림 을 순서대로 레이 어드 할 수 있 습 니 다.
문법:drawalbe/drawable-layer.xml 에서
<layer-list xmlns:Android="http://schemas.android.com/apk/res/android">
<item Android:drawable="@android:color/white" />
<item Android:drawable="@drawable/logo_overlay" />
</layer-list>
사용 방법 은 다른 그림 과 같 습 니 다:스타일 에서 참조:
<resources>
<style name="LookupTheme" parent="@Android:style/Theme.Light.NoTitleBar">
<item name="Android:windowBackground">@drawable/drawable-layer</item>
</style>
</resources>
자바 코드 에서 참조:((ImageView) findViewById(R.id.imageview)).setImageDrawable(getResources().getDrawable(R.drawable.drawable-layer)
코드 에서 구현:
Resources resources = getResources();
Drawable[] layers = new Drawable[2];
layers[0] = r.getDrawable(R.drawable.white);
layers[1] = r.getDrawable(R.drawable.logo_overlay);
LayerDrawable layerDrawable = new LayerDrawable(layers)
((ImageView) findViewById(R.id.imageview)).setImageDrawable(layerDrawable);
다시 하나의 예 를 들다.두 장의 그림 으로 겹 쳐 서 한 장의 그림 을 만들어 야 한다.
먼저 drawalbe/login 을 만 듭 니 다.head.xml 파일 의 내용 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<layer-list
xmlns:Android="http://schemas.android.com/apk/res/android">
<item Android:id="@+id/user_faceback_drawable" android:drawable="@drawable/faceback" />
<item Android:id="@+id/user_face_drawable" android:drawable="@drawable/h001" android:left="10.0dip" android:top="18.0dip" android:right="25.0dip" android:bottom="35.0dip" />
</layer-list>
그리고 이 그룹의 그림 을 사용 할 수 있 습 니 다.예 를 들 어 ImageView 에 표 시 됩 니 다.
<ImageView Android:id="@+id/faceImg" android:background="@drawable/login_head"
Android:layout_width="wrap_content" android:layout_height="wrap_content" />
자바 코드 사용:어떻게 여러 개의 Drawable 을 중첩 합 니까?
Bitmap 의 중첩 처 리 는 안 드 로 이 드 플랫폼 에서 Canvas 를 통 해 한 층 한 층 그림 을 그 릴 수 있다 는 것 을 아 실 수 있 습 니 다.Drawable 에 서 는 어떻게 처리 합 니까?BitmapDrawable 의 getBitmap 방법 을 사용 하여 Drawable 을 Bitmap 으로 변환 하 는 것 외 에 오늘 Android 123 은 간단 한 LayerDrawable 클래스 를 사용 하 는 것 이 좋 습 니 다.LayerDrawable 은 말 그대로 레이 어 그래 픽 대상 입 니 다.다음은 간단 한 코드 로 직접 표시 합 니 다.
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
Drawable[] array = new Drawable[3];
array[0] = new PaintDrawable(Color.BLACK); //
array[1] = new PaintDrawable(Color.WHITE); //
array[2] = new BitmapDrawable(bm); //
LayerDrawable ld = new LayerDrawable(array); // Drawable
ld.setLayerInset(1, 1, 1, 1, 1); // 1 ,
ld.setLayerInset(2, 2, 2, 2, 2); // 2 ,
mImageView.setImageDrawable(ld);
위의 방법 에서 LayerDrawable 이 관건 입 니 다.Android 개발 망 은 setLayerInset 방법 원형 을 Public void setLayerInset(int index,int l,int t,int r,int b)이 라 고 알려 주 었 습 니 다.그 중에서 첫 번 째 매개 변 수 는 층 의 색인 번호 이 고 뒤의 네 개의 매개 변 수 는 각각 left,top,right 와 bottom 입 니 다.간단 한 이미지 합성 에 대해 서 는 1 층 과 2 층 의 PaintDrawable 을 BitmapDrawable 로 바 꾸 면 간단 한 이미지 합성 이 가능 합 니 다.더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.