Android Drawable Resource 학습(7), TransitionDrawable
startTransition()
.뒤로 reverseTransition()
.파일 위치:
res/drawable/filename.xml
파일 이름을 자원 ID로 지정
컴파일 자원 유형:
가리키다
TransitionDrawable
의 포인터자원 참조:
In Java:
R.drawable.filename
In XML:
@[package:]drawable/filename
구문:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</transition>
요소:
<transition>
반드시하나 이상의
속성:
xmlns:android
문자열 유형,
반드시XML 파일의 이름공간을 정의합니다.
"http://schemas.android.com/apk/res/android"
. <item>
TransitionDrawable에 사용되는 drawable를 정의합니다.반드시
<transition> 。
<bitmap> 。
속성:
android:drawable
Drawable 리소스.반드시Drawable 리소스를 참조합니다.
android:id
자원 ID입니다.drawable 자원의 유일한 표식입니다.
"@+id/name"
방식으로 이 item에 새로운 자원 ID를 정의합니다.사용 가능View.findViewById()
또는Activity.findViewById()
등 방식으로 이 item을 검색하고 수정합니다.android:top
Integer. 위쪽과의 거리
android:right
Integer.오른쪽과의 거리
android:bottom
Integer. 아래와의 거리
android:left
Integer.왼쪽과의 거리
예:
XML 파일 저장:
res/drawable/transition.xml
: <?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/on" />
<item android:drawable="@drawable/off" />
</transition>
layout 파일에서 다음을 사용합니다.
<ImageButton
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/transition" />
And the following code performs a 500ms transition from the first item to the second:
ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();
drawable.startTransition(500);
참고 자료
TransitionDrawable
다음은 인스턴스입니다.
1. xml 방식 사용
transition.xml:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/image01"/>
<item android:drawable="@drawable/image02"/>
</transition>
layout에서 다음을 사용합니다.
<ImageView
android:id="@+id/imgView"
android:src="@drawable/transition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
코드에서 제어하기
ImageView imageView = (ImageView) findViewById(R.id.imgView);
TransitionDrawable transitionDrawable = (TransitionDrawable) imageView.getDrawable();
transitionDrawable.startTransition(3000);
다음은 실례입니다. 여러 장의 그림이 순환하는 덤핑 덤핑 효과를 실현합니다.
package com.example.drawabletest;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.TransitionDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
public class MainActivity extends Activity {
private int change=0;
private int[] ids = new int[] { R.drawable.image1, R.drawable.image2, R.drawable.image3,
R.drawable.image4, R.drawable.image5 };
private Drawable[] drawables;
private ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imgView);
/* drawable */
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.image1, opts);
opts.inSampleSize = computeSampleSize(opts, -1, 500 * 500);
opts.inJustDecodeBounds = false;
drawables=new Drawable[ids.length];
try {
for (int i = 0; i < ids.length; i++) {// for , 5 drawable
Bitmap bmp = BitmapFactory.decodeResource(getResources(), ids[i], opts);
drawables[i] = new BitmapDrawable(bmp);
}
} catch (Exception e) {
e.printStackTrace();
}
// , transition
new Thread(new MyRunnable()).start();
}
// transition
private Handler handler=new Handler(new Handler.Callback() {
public boolean handleMessage(Message msg) {
int duration=msg.arg1;
TransitionDrawable transitionDrawable=null;
transitionDrawable= new TransitionDrawable(new Drawable[] {
drawables[change%ids.length],// 0 1 2 3 4 5 0 1 2.。。
drawables[(change+1)%ids.length] });
change++;
imageView.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(duration);
return false;
}
});
// , , transition
private class MyRunnable implements Runnable{
public void run() {
while (true) {
int duration=3000;//
Message message=handler.obtainMessage();
message.arg1=duration;
handler.sendMessage(message);
try {
Thread.sleep(duration);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//
public static int computeSampleSize(BitmapFactory.Options options, int minSideLength,
int maxNumOfPixels) {
int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels);
int roundedSize;
if (initialSize <= 8) {
roundedSize = 1;
while (roundedSize < initialSize) {
roundedSize <<= 1;
}
} else {
roundedSize = (initialSize + 7) / 8 * 8;
}
return roundedSize;
}
//
private static int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength,
int maxNumOfPixels) {
double w = options.outWidth;
double h = options.outHeight;
int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h
/ maxNumOfPixels));
int upperBound = (minSideLength == -1) ? 128 : (int) Math.min(
Math.floor(w / minSideLength), Math.floor(h / minSideLength));
if (upperBound < lowerBound) {
// return the larger one when there is no overlapping zone.
return lowerBound;
}
if ((maxNumOfPixels == -1) && (minSideLength == -1)) {
return 1;
} else if (minSideLength == -1) {
return lowerBound;
} else {
return upperBound;
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.