Android漂浮動態效果的簡單實現
阿新 • • 發佈:2019-02-10
漂浮動態效果的簡單實現,本測試,是從手機左邊向右慢慢飄過,數量,速度都可以設定,為了有氣氛,新增的音樂播放。
直接看程式碼
佈局一個如下:
<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; } }