package com.wistron.WiViewer;
import java.util.List;
import com.wistron.swpc.wicamera3dii.R;
import Utilities.CSStaticData;
import android.app.Activity;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.ZoomControls;
public class Panorama360Activity extends Activity implements SensorEventListener {
/** Called when the activity is first created. */
static int screenw;
static int screenh;
private SensorManager sensorManager;
float m_orientation=0;
float[] m_bufferOritation ={0,0,0,0,0};
int m_times=0;
float m_alpha=0.5f;
float m_alpha2=0.2f;
PanoramaView mPanoramaView;
TextView mTextView;
Button m_btn_normal;
Button m_btn_filtrate;
Button m_btn_switchUI;
Button m_btn_filter2;
int filtermode=0;
String TAG="Panorama360Activity";
//ZoomControls mzoom;
RelativeLayout m_relative_pano;
String m_filepath="";
String m_cmd="";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
requestWindowFeature(Window.FEATURE_NO_TITLE);
screenw=getWindowManager().getDefaultDisplay().getWidth();
screenh=getWindowManager().getDefaultDisplay().getHeight();
setContentView(R.layout.panorama360);
m_relative_pano=(RelativeLayout) findViewById(R.id.relativelayout_pano);
Intent intent=Panorama360Activity.this.getIntent();
String intentPath = intent.getDataString();
if(intentPath != null){
//第三方调用
m_filepath = Uri.decode(intentPath);
}
else
{
//内部调用通过gallery启动图片浏览器
m_cmd= intent.getStringExtra("cmd");
String fileName = intent.getStringExtra(
"filePath");
if(fileName!=null)
{
m_filepath=fileName;
}
else {
finish();
}
}
//m_filepath="mnt/sdcard/big.PNG";
// m_filepath="mnt/sdcard/mypano4.jpg";
mPanoramaView=new PanoramaView(Panorama360Activity.this, m_filepath);
if(!mPanoramaView.isValid)
{
//异常退出
finish();
}
// mPanoramaView=new PanoramaView(Panorama360Activity.this, m_filepath);
m_relative_pano.addView(mPanoramaView);
mTextView=(TextView) findViewById(R.id.editText1);
m_btn_normal=(Button) findViewById(R.id.button3);
m_btn_filtrate=(Button) findViewById(R.id.button2);
m_btn_switchUI=(Button) findViewById(R.id.button1);
m_btn_filter2=(Button) findViewById(R.id.button4);
initButtonClick();
}
@Override
protected void onResume()
{
// TODO Auto-generated method stub
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensors = sensorManager
.getSensorList(Sensor.TYPE_ORIENTATION);
if (sensors.size() > 0) {
sensorManager.registerListener(this, sensors.get(0),
SensorManager.SENSOR_DELAY_FASTEST);
}
super.onResume();
}
@Override
public void finish()
{
Panorama360Activity.this.setResult(RESULT_OK);
super.finish();
}
public void initButtonClick()
{
m_btn_filter2.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
filtermode=2;
}
});
m_btn_normal.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
filtermode=0;
}
});
m_btn_filtrate.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stubgg
if(CSStaticData.DEBUG)
Log.e(TAG, "m_btn_filtrate clicked");
filtermode=1;
}
});
m_btn_switchUI.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
mPanoramaView.switchUImode();
}
});
}
@Override
protected void onPause()
{
// TODO Auto-generated method stub
if (sensorManager != null) {
sensorManager.unregisterListener(this);
}
super.onPause();
}
@Override
protected void onDestroy()
{
// TODO Auto-generated method stub
mPanoramaView.release();
super.onDestroy();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event)
{
{
boolean state = false;
state |= super.dispatchTouchEvent(event);
state |= mPanoramaView.onTouchEvent(event);
return state;
}
// {
// super.dispatchTouchEvent(event);
// mPanoramaView.onTouchEvent(event);
// return false;
// }
}
public void setOrientationToBuffer(float degree)
{
for (int i = 0; i < m_bufferOritation.length-1; i++)
{
m_bufferOritation[i]=m_bufferOritation[i+1];
}
m_bufferOritation[4]=degree;
}
@Override
public void onSensorChanged(SensorEvent event)
{
// TODO Auto-generated method stub
float tempDegree=event.values[0];
setOrientationToBuffer(Math.round(event.values[0]));
if(m_times<5)
{
m_orientation=event.values[0];
mPanoramaView.setInitOrientation(m_orientation);
m_times++;
}
else
{
if(filtermode==1)
{
if(Math.abs(event.values[0]-m_orientation)>1)
{
mPanoramaView.updateUIWhenOrientationChanged(tempDegree,tempDegree);
}
m_orientation=tempDegree;
}
else if(filtermode==0)
{
float average=m_alpha*event.values[0]+(1-m_alpha)*m_orientation;
m_orientation= mPanoramaView.updateUIWhenOrientationChanged(average,tempDegree);
}
else if (filtermode==2) {
float total=0;
for (int i = 0; i < m_bufferOritation.length; i++)
{
total+=m_bufferOritation[i];
}
total=total/5f;
m_orientation= mPanoramaView.updateUIWhenOrientationChanged(total,tempDegree);
}
}
mTextView.setText("当前方位值为"+event.values[0]+"当前视角为"+mPanoramaView.m_sight_angle);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy)
{
// TODO Auto-generated method stub
}
}