android fps测试 源码,android帧率测试

【实例简介】android帧率测试,源码,测试apk的刷新率。

【实例截图】FpsService-帧率测试.zip

42bac85895817c2a1361763a08fa4487.png

53a75abc8611a6e230932e159641ba92.png

【核心代码】

package com.example.fps;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.view.animation.AccelerateInterpolator;

import android.view.animation.Animation;

import android.view.animation.DecelerateInterpolator;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import com.baidu.fps.FpsService;

public class MainActivity extends Activity implements AdapterView.OnItemClickListener,

View.OnClickListener

{

private final Handler mHandler = new Handler()

{

public void handleMessage(android.os.Message msg)

{

};

};

private ListView mPhotosList;

private ViewGroup mContainer;

private ImageView mImageView;

// Names of the photos we show in the list

private static final String[] PHOTOS_NAMES = new String[] {

"Lyon",

"Livermore",

"Tahoe Pier",

"Lake Tahoe",

"Grand Canyon",

"Bodie"

};

// Resource identifiers for the photos we want to display

private static final int[] PHOTOS_RESOURCES = new int[] {

R.drawable.photo1,

R.drawable.photo2,

R.drawable.photo3,

R.drawable.photo4,

R.drawable.photo5,

R.drawable.photo6

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.animations_main_screen);

mPhotosList = (ListView) findViewById(android.R.id.list);

mImageView = (ImageView) findViewById(R.id.picture);

mContainer = (ViewGroup) findViewById(R.id.container);

// Prepare the ListView

final ArrayAdapter adapter = new ArrayAdapter(this,

android.R.layout.simple_list_item_1, PHOTOS_NAMES);

mPhotosList.setAdapter(adapter);

mPhotosList.setOnItemClickListener(this);

// Prepare the ImageView

mImageView.setClickable(true);

mImageView.setFocusable(true);

mImageView.setOnClickListener(this);

// Since we are caching large views, we want to keep their cache

// between each animation

mContainer.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);

showFps(true);

}

/**

* Setup a new 3D rotation on the container view.

*

* @param position the item that was clicked to show a picture, or -1 to show the list

* @param start the start angle at which the rotation must begin

* @param end the end angle of the rotation

*/

private void applyRotation(int position, float start, float end) {

// Find the center of the container

final float centerX = mContainer.getWidth() / 2.0f;

final float centerY = mContainer.getHeight() / 2.0f;

// Create a new 3D rotation with the supplied parameter

// The animation listener is used to trigger the next animation

final Rotate3dAnimation rotation =

new Rotate3dAnimation(start, end, centerX, centerY, 310.0f, true);

rotation.setDuration(500);

rotation.setFillAfter(true);

rotation.setInterpolator(new AccelerateInterpolator());

rotation.setAnimationListener(new DisplayNextView(position));

mContainer.startAnimation(rotation);

}

public void onItemClick(AdapterView> parent, View v, int position, long id) {

// Pre-load the image then start the animation

mImageView.setImageResource(PHOTOS_RESOURCES[position]);

applyRotation(position, 0, 90);

}

public void onClick(View v) {

applyRotation(-1, 180, 90);

}

/**

* This class listens for the end of the first half of the animation.

* It then posts a new action that effectively swaps the views when the container

* is rotated 90 degrees and thus invisible.

*/

private final class DisplayNextView implements Animation.AnimationListener {

private final int mPosition;

private DisplayNextView(int position) {

mPosition = position;

}

public void onAnimationStart(Animation animation) {

}

public void onAnimationEnd(Animation animation) {

mContainer.post(new SwapViews(mPosition));

}

public void onAnimationRepeat(Animation animation) {

}

}

/**

* This class is responsible for swapping the views and start the second

* half of the animation.

*/

private final class SwapViews implements Runnable {

private final int mPosition;

public SwapViews(int position) {

mPosition = position;

}

public void run() {

final float centerX = mContainer.getWidth() / 2.0f;

final float centerY = mContainer.getHeight() / 2.0f;

Rotate3dAnimation rotation;

if (mPosition > -1) {

mPhotosList.setVisibility(View.GONE);

mImageView.setVisibility(View.VISIBLE);

mImageView.requestFocus();

rotation = new Rotate3dAnimation(90, 180, centerX, centerY, 310.0f, false);

} else {

mImageView.setVisibility(View.GONE);

mPhotosList.setVisibility(View.VISIBLE);

mPhotosList.requestFocus();

rotation = new Rotate3dAnimation(90, 0, centerX, centerY, 310.0f, false);

}

rotation.setDuration(500);

rotation.setFillAfter(true);

rotation.setInterpolator(new DecelerateInterpolator());

mContainer.startAnimation(rotation);

}

}

@Override

protected void onDestroy()

{

super.onDestroy();

showFps(false);

}

private void showFps(boolean show)

{

if(show)

{

Intent intent = new Intent(this, FpsService.class);

startService(intent);

}

else

{

Intent intent = new Intent(this, FpsService.class);

stopService(intent);

}

}

@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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值