漂浮动态效果的简单实现,本测试,是从手机左边向右慢慢飘过,数量,速度都可以设置,为了有气氛,添加的音乐播放。
直接看代码
布局一个如下:
<RelativeLayout 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"
tools:context=".MainActivity" >
<FrameLayout
android:id="@+id/testlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:gravity="center"
android:orientation="vertical" >
</FrameLayout>
</RelativeLayout>
FloatCloudView.java类:
package com.example.tesstanything;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
public class FloatCloudyView extends View implements Runnable {
private Bitmap bitmap;
private int left;
private int top;
private int dx = 1;
private int sleepTime;
public static boolean IsRunning = true;
private Handler handler;
public FloatCloudyView(Context context, int resource, int left,int top,
int sleepTime) {
super(context);
this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
bitmap = BitmapFactory.decodeResource(getResources(), resource);
this.left = left;
this.top = top;
this.sleepTime = sleepTime;
handler = new Handler() {
public void handleMessage(android.os.Message msg) {
FloatCloudyView.this.invalidate();
};
};
}
public void move() {
new Thread(this).start();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(bitmap, left, top, null);
}
@Override
public void run() {
while (FloatCloudyView.IsRunning) {
if ((bitmap != null) && (left > (getWidth()))) {
left = -bitmap.getWidth();
}
left = left + dx;
handler.sendMessage(handler.obtainMessage());
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package com.example.tesstanything;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.FrameLayout;
public class MainActivity extends Activity {
private FrameLayout fl;
private MediaPlayer mediaPlayer;
private int place=0;
private Button bt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
fl=(FrameLayout)findViewById(R.id.testlayout);
floatCloud();
}
private void floatCloud() {
// TODO Auto-generated method stub
//获取WindowManager
WindowManager wManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
int width = wManager.getDefaultDisplay().getWidth();
int height = wManager.getDefaultDisplay().getHeight();
//获取FrameLayout的高度
fl.getLayoutParams().height = height;
FloatCloudyView.IsRunning = true;
FloatCloudyView view1 = new FloatCloudyView(this, R.drawable.test1,
-width/2,0, 15);
FloatCloudyView view2 = new FloatCloudyView(this, R.drawable.test2,
width/3, height/2,18);
fl.addView(view1, 0);
fl.addView(view2, 0);
//窗口添加
view1.move();
view2.move();
mediaPlayer=MediaPlayer.create(this, R.raw.music);
mediaPlayer.start();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
place = mediaPlayer.getCurrentPosition();
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if(place!=0){
mediaPlayer.seekTo(place);
mediaPlayer.start();
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if(mediaPlayer!=null){
mediaPlayer.release();
mediaPlayer=null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}