Tôi mới sử dụng nền tảng Android. Tôi muốn phát triển một hình nền sống trực tiếp. Khi tôi được tìm kiếm về điều này trong Công cụ tìm kiếm, nhiều người trong số họ đã tạo hình nền động làm mã của họ (sử dụng SurfaceView
và Canvas
), tôi không biết nhiều về điều này. Đây là sự nghi ngờ của tôi, bất kỳ nào cũng có thể đặt hình ảnh .gif làm hình nền động.Có thể đặt một tệp gif động làm hình nền động trong Android không?
Trả lời
Đây là dịch vụ hình nền cơ bản (như được cung cấp trong Hướng dẫn hình nền động) bị tấn công để hiển thị hình động gif.
Đầu tiên - tạo dự án & thiết lập tệp kê khai dưới dạng hình nền động.
Sau đó - tải về một gif, như thế này một
Lưu gif rằng trong res/raw/nyan.gif
trong dự án của bạn.
Tạo dịch vụ hình nền động, như được minh họa trong ví dụ này.
public class NyanNyanService extends WallpaperService {
static final String TAG = "NYAN";
static final Handler mNyanHandler = new Handler();
/**
* @see android.service.wallpaper.WallpaperService#onCreate()
*/
@Override
public void onCreate() {
super.onCreate();
}
/**
* @see android.service.wallpaper.WallpaperService#onCreateEngine()
*/
@Override
public Engine onCreateEngine() {
try {
return new NyanEngine();
} catch (IOException e) {
Log.w(TAG, "Error creating NyanEngine", e);
stopSelf();
return null;
}
}
class NyanEngine extends Engine {
private final Movie mNyan;
private final int mNyanDuration;
private final Runnable mNyanNyan;
float mScaleX;
float mScaleY;
int mWhen;
long mStart;
NyanEngine() throws IOException {
InputStream is = getResources().openRawResource(R.raw.nyan);
if (is != null) {
try {
mNyan = Movie.decodeStream(is);
mNyanDuration = mNyan.duration();
} finally {
is.close();
}
} else {
throw new IOException("Unable to open R.raw.nyan");
}
mWhen = -1;
mNyanNyan = new Runnable() {
public void run() {
nyan();
}
};
}
@Override
public void onDestroy() {
super.onDestroy();
mNyanHandler.removeCallbacks(mNyanNyan);
}
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
nyan();
} else {
mNyanHandler.removeCallbacks(mNyanNyan);
}
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
mScaleX = width/(1f * mNyan.width());
mScaleY = height/(1f * mNyan.height());
nyan();
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep,
float yOffsetStep, int xPixelOffset, int yPixelOffset) {
super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset);
nyan();
}
void nyan() {
tick();
SurfaceHolder surfaceHolder = getSurfaceHolder();
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas();
if (canvas != null) {
nyanNyan(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
mNyanHandler.removeCallbacks(mNyanNyan);
if (isVisible()) {
mNyanHandler.postDelayed(mNyanNyan, 1000L/25L);
}
}
void tick() {
if (mWhen == -1L) {
mWhen = 0;
mStart = SystemClock.uptimeMillis();
} else {
long mDiff = SystemClock.uptimeMillis() - mStart;
mWhen = (int) (mDiff % mNyanDuration);
}
}
void nyanNyan(Canvas canvas) {
canvas.save();
canvas.scale(mScaleX, mScaleY);
mNyan.setTime(mWhen);
mNyan.draw(canvas, 0, 0);
canvas.restore();
}
}
}
này về cơ bản sẽ mở rộng con mèo nyan nyan-để phù hợp với màn hình và animate nó vĩnh viễn.
Một hình nền sống manifest trông loại-of-như thế này (ví dụ này không chứa một hoạt động cấu hình):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.nyan.nyan.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/application_nyan" >
<service
android:label="@string/wallpaper_nyan"
android:name=".NyanNyanService"
android:permission="android.permission.BIND_WALLPAPER">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data android:name="android.service.wallpaper" android:resource="@xml/nyan" />
</service>
</application>
</manifest>
Các AndroidManifest.xml có một tham chiếu đến một tập tin trong res/xml
, trong trường hợp này được đặt tên "nyan.xml":
<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />
nó thực hiện nhưng không có đầu ra trên màn hình, trong giao diện điều khiển của tôi cho thấy, cat = [android.intent.category.LAUNCHER] flg = 0x10000000 cmp = test.anim/.NyanNyanService} từ null (pid = 7019, uid = 2000) yêu cầu android.permission.BIND_WALLPAPER – Aerrow
Tôi nghĩ rằng tôi phạm sai lầm trong tệp kê khai, bạn có thể vui lòng đăng tệp kê khai hay không. – Aerrow
hm. có, bạn không thể bắt đầu một hình nền động từ bất kỳ thứ gì không giữ quyền BIND_WALLPAPER (được dành riêng cho các ứng dụng hệ thống) - tức là để kiểm tra hình nền của bạn, bạn chọn nó trong bộ chọn hình nền động trong màn hình chủ của bạn. – Jens
- 1. Đặt hoạt ảnh .GIF Làm nền Android
- 2. Phát tệp hình ảnh GIF động trong imageview
- 3. Hiển thị hình động .gif trong QLabel
- 4. Hình nền hoạt động Android
- 5. Hiển thị hình động Gif trong java
- 6. Hỗ trợ GIF động trên Android
- 7. Hoạt động Android - nền drawable hoạt hình
- 8. Có thể phát hiện hình ảnh động bên cạnh hình ảnh gif không?
- 9. Android: Đặt màu nền và hình nền mờ trên Hoạt động
- 10. Hãy một GIF động với ImageMagick API
- 11. Cách phát tệp GIF trong Android?
- 12. Lấy thời lượng của một GIF động?
- 13. Thực hành tốt có sử dụng gif động trong các hình ảnh css không?
- 14. Đặt hoạt động xuất hiện trong 'trình chọn hình nền'
- 15. Làm cách nào để đặt một người dùng admob trong màn hình cài đặt cho hình nền động?
- 16. Với PHP, có thể hợp nhất một ảnh động gif bằng jpg và giữ lại hoạt ảnh gif không?
- 17. Làm hình nền động android với di chuyển sai lệch
- 18. Hình nền Android trong Tệp XML
- 19. Android - Cách đặt hình nền?
- 20. Chọn nền cho Hình nền động
- 21. Phát hiện Nhấp vào nút "Đặt hình nền" trong Bộ chọn hình nền động
- 22. Tạo GIF động bằng ImageIO?
- 23. Cách tạo hoạt ảnh GIF hoạt động từ Android WebView
- 24. Android: Đặt nền cửa sổ khi khởi chạy Hoạt động
- 25. Thay đổi kích thước hình động GIF, hình ảnh động/hình ảnh, python
- 26. Android: Gửi e-mail có tệp đính kèm tự động trong nền
- 27. Sử dụng FrameLayout làm Hình nền động
- 28. đặt hình nền thành trong suốt trong android
- 29. Đặt một hình ảnh lớn trong ImageView không hoạt động
- 30. Gif động không hoạt ảnh khi gửi
tham khảo [câu trả lời này] (http://stackoverflow.com/a/7772170/967142) – Jens
@Jens: cảm ơn cho phát lại của bạn, nếu bạn có bất kỳ mẫu mã làm thế nào để làm điều này, – Aerrow
Vâng, điều này cho bạn thấy [cách] (http: //droid-blog.n et/2011/10/14/tutorial-how-to-use-hoạt hình-gifs-in-android-part-1 /) – Jens