首页 > Windows开发 > 详细

WindowView... 重力感应

时间:2015-09-19 02:15:34      阅读:395      评论:0      收藏:0      [点我收藏+]

WindowView中的图像能根据手机的重力感应移动自己的位置,从不同的角度可以看到不同的视野范围,就如同从窗户往外看,因此叫做WindowView。

运行效果:

  • bubuko.com,布布扣

相关代码

?

代码呈上:package com.jmedeisis.example.windowview;

import android.annotation.TargetApi;
import android.content.pm.ActivityInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

import com.jmedeisis.windowview.WindowView;

public class DemoActivity extends ActionBarActivity {

??? private static final String ORIENTATION = "orientation";
??? private static final String DEBUG_TILT = "debugTilt";
??? private static final String DEBUG_IMAGE = "debugImage";
??? boolean debugTilt, debugImage;
??? WindowView windowView1;
??? WindowView windowView2;

??? @Override
??? protected void onCreate(Bundle savedInstanceState) {
??????? super.onCreate(savedInstanceState);
??????? setContentView(R.layout.activity_demo);

??????? windowView1 = (WindowView) findViewById(R.id.windowView1);
??????? windowView2 = (WindowView) findViewById(R.id.windowView2);
??????? /*
???????? * For sake of demo interface simplicity & compass visualisation, tapping on either
???????? * WindowView resets both of their orientation origins.
???????? * Typically, this would be done individually.
???????? */
??????? View.OnClickListener onClickListener = new View.OnClickListener() {
??????????? @Override
??????????? public void onClick(View v) {
??????????????? resetWindowViewOrientationOrigins();
??????????? }
??????? };
??????? windowView1.setOnClickListener(onClickListener);
??????? windowView2.setOnClickListener(onClickListener);

??????? if(null != savedInstanceState && savedInstanceState.containsKey(ORIENTATION)
??????????????? && savedInstanceState.containsKey(DEBUG_TILT)
??????????????? && savedInstanceState.containsKey(DEBUG_IMAGE)){
??????????? //noinspection ResourceType
??????????? setRequestedOrientation(savedInstanceState.getInt(ORIENTATION));
??????????? debugTilt = savedInstanceState.getBoolean(DEBUG_TILT);
??????????? debugImage = savedInstanceState.getBoolean(DEBUG_IMAGE);
??????? } else {
??????????? setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // default
??????????? debugTilt = false;
??????????? debugImage = false;
??????? }
??? }

??? @Override
??? public void onSaveInstanceState(Bundle outState){
??????? super.onSaveInstanceState(outState);
??????? outState.putInt(ORIENTATION, getRequestedOrientation());
??????? outState.putBoolean(DEBUG_TILT, debugTilt);
??????? outState.putBoolean(DEBUG_IMAGE, debugImage);
??? }

??? @TargetApi(Build.VERSION_CODES.HONEYCOMB)
??? @Override
??? public boolean onCreateOptionsMenu(Menu menu) {
??????? getMenuInflater().inflate(R.menu.demo, menu);

??????? menu.findItem(R.id.action_lock_portrait)
??????????????? .setChecked(getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
??????? menu.findItem(R.id.action_debug_tilt).setChecked(debugTilt);
??????? menu.findItem(R.id.action_debug_image).setChecked(debugImage);

??????? if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
??????????? final View actionView = View.inflate(this, R.layout.device_compass, null);
??????????? final View xy = actionView.findViewById(R.id.compass_xy);
??????????? final View z = actionView.findViewById(R.id.compass_z);
??????????? windowView1.setOnNewOrientationListener(new WindowView.OnNewOrientationListener() {
??????????????? @Override
??????????????? public void onNewOrientation(WindowView windowView) {
??????????????????? xy.setRotation(windowView.getLatestYaw());
??????????????????? xy.setRotationX(windowView.getLatestPitch());
??????????????????? xy.setRotationY(windowView.getLatestRoll());

??????????????????? z.setRotation(windowView.getLatestYaw());
??????????????????? z.setRotationX(windowView.getLatestPitch());
??????????????????? z.setRotationY(windowView.getLatestRoll() - 90);
??????????????? }
??????????? });
??????????? actionView.setOnClickListener(new View.OnClickListener() {
??????????????? @Override
??????????????? public void onClick(View v) {
??????????????????? resetWindowViewOrientationOrigins();
??????????????? }
??????????? });
??????????? actionView.setOnLongClickListener(new View.OnLongClickListener() {
??????????????? @Override
??????????????? public boolean onLongClick(View v) {
??????????????????? Toast t = Toast.makeText(DemoActivity.this,
??????????????????????????? R.string.action_reset_orientation, Toast.LENGTH_SHORT);
??????????????????? int[] pos = new int[2];
??????????????????? actionView.getLocationInWindow(pos);
??????????????????? t.setGravity(Gravity.TOP | Gravity.LEFT,
??????????????????????????? pos[0], pos[1] + actionView.getHeight() / 2);
??????????????????? t.show();
??????????????????? return true;
??????????????? }
??????????? });


??????????? menu.findItem(R.id.action_reset_orientation).setActionView(actionView);
??????? }

??????? return true;
??? }

??? private void resetWindowViewOrientationOrigins(){
??????? windowView1.resetOrientationOrigin();
??????? windowView2.resetOrientationOrigin();
??????? Toast.makeText(DemoActivity.this, R.string.hint_orientation_reset, Toast.LENGTH_SHORT).show();
??? }

??? @Override
??? public boolean onOptionsItemSelected(MenuItem item){
??????? switch(item.getItemId()){
??????????? case R.id.action_lock_portrait:
??????????????? item.setChecked(!item.isChecked());
??????????????? if(item.isChecked()){
??????????????????? setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
??????????????? } else {
??????????????????? setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
??????????????? }
??????????????? return true;
??????????? case R.id.action_debug_tilt:
??????????????? item.setChecked(!item.isChecked());
??????????????? debugTilt = item.isChecked();
??????????????? windowView1.setDebugEnabled(debugTilt, debugImage);
??????????????? windowView2.setDebugEnabled(debugTilt, debugImage);
??????????????? return true;
??????????? case R.id.action_debug_image:
??????????????? item.setChecked(!item.isChecked());
??????????????? debugImage = item.isChecked();
??????????????? windowView1.setDebugEnabled(debugTilt, debugImage);
??????????????? windowView2.setDebugEnabled(debugTilt, debugImage);
??????????????? return true;
??????? }
??????? return super.onOptionsItemSelected(item);
??? }
}

?

完整代码下载:http://itlanbao.com/code/20150811/10000/100247.html

WindowView... 重力感应

原文:http://3105165143.iteye.com/blog/2244420

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!