小屏幕android手机autofocus失败
2015-01-26 17:16:00 weixin_34384681 阅读数 6

      一开始接触android应用项目时,在项目快上线时策划要求加个高亮,每次都是直接从网上百度一下,现在做游戏了,却还是这个需求,这里备份一下方便后续的查找,毕竟是自己写好且验证没问题的 :)

  首先,在Activity里添加一下代码:

成员变量:
private PowerManager.WakeLock wakeLock = null; 


重写父类Activity的两个方法并添加一下逻辑:

@Override  
    public void onResume() {
        super.onResume();    
        acquireWakeLock(this);  
        
    }  
  
    @Override  
    public void onPause() {  
        super.onPause();  
        releaseWakeLock();  
        
    }  
  

    public void acquireWakeLock(Context context) {  
        if (wakeLock == null) {  
            PowerManager powerManager = (PowerManager) (context  
                    .getSystemService(Context.POWER_SERVICE));  
            wakeLock = powerManager.newWakeLock(  
                    PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");  
            wakeLock.acquire();  
        }  
    }  
  

    public void releaseWakeLock() {  
        if (wakeLock != null && wakeLock.isHeld()) {  
            wakeLock.release();  
            wakeLock = null;  
        }  
    }

然后,在AndroidManifest.xml里添加如下权限即可:

  <uses-permission android:name="android.permission.WAKE_LOCK" />

2016-04-14

IOS设备下的屏幕常亮处理:

在AppController.mm文件的didFinishLaunchingWithOptions方法里面,添加

[ [ UIApplication sharedApplication ] setIdleTimerDisabled:YES ] ;到

[[UIApplication sharedApplication] setStatusBarHidden: YES];这句代码后面。

转载于:https://my.oschina.net/u/223340/blog/371910

2015-07-29 22:06:20 zdmxhyy 阅读数 273
                Display display = mActivity.getWindowManager().getDefaultDisplay();  //在activity中     Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();

int height = display.getHeight();


           Configuration cf = this.getResources().getConfiguration();  

if (cf.orientation == Configuration.ORIENTATION_LANDSCAPE) {

} else {

}



2013-03-01 14:40:10 dongshuai1991 阅读数 946

 接触安卓有一段时间了,个人感觉安卓页面自适应这块比web复杂的多,因为手机开发要考虑多种屏幕,下面就对这块做一下总结:
一:不同的layout
Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让Application自动适应不同的屏幕呢?
其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
二:hdpi、mdpi、ldpi
在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
  drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
  (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
  (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
  (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
  系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
  在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
三:横坚屏切换

在开发游戏的时候,有些游戏是只能横屏玩的,所以手机竖立放置的时候,要保持游戏画面依然横屏。要做到这个要求其实很简单,
在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。

例如(landscape是横向,portrait是纵向):
Java代码
<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ray.linkit"
    android:versi
    android:versi>  
  <application android:icon="@drawable/icon" android:label="@string/app_name">  
    <activity android:name=".Main"
            android:label="@string/app_name"
            android:screenOrientation="portrait">  
        <intent-filter>  
          <action android:name="android.intent.action.MAIN" />  
          <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    </activity>  
          <activity android:name=".GamePlay"
          android:screenOrientation="portrait"></activity>  
          <activity android:name=".OptionView"
          android:screenOrientation="portrait"></activity>  
  </application>  
  <uses-sdk android:minSdkVersion="3" />  
</manifest>  
1.另外,android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,
在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!
2.也可以给每个activity加上android:c属性,就不会重启activity.而是去调用onConfigurationChanged(Configuration newConfig). 这样就可以在这个方法里调整显示方式.
比如
Java代码
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){  
  //横向  
  setContentView(R.layout.file_list_landscape);  
}else{  
  //竖向  
  setContentView(R.layout.file_list);  
}

在做android或者Ophone开发时,在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件在默认情况下会重新加载画面并显示和横评一样的画面,这样会有2个问题,
  • 布局问题,在竖屏 显示的布局到横屏中由于宽和高发生了变化所有多少都会影响到布局(除非你定制2套画面在然后加个判断在横屏时怎么显示,在竖屏时怎么显示),当然最简单的办法就是在项目的 AndroidManifest.xml中找到你所指定的activity 中加上
    • 只竖屏显示的话(android:screenOrientation="portrait")
    • 只横屏显示的话(android:screenOrientation="landscape")
  • 画面重新载入问题:在默认情况下横竖切换时会重新载入画面,导致一些不必要的资源浪费,更严重的是画面上保持的数据(特别是游戏方面)也都被重置了(当然你可以在重置前保存这些数据到数据库或者到文本文件中),要怎么避免在横竖切换时重新载入画面,
    • 首先要在 AndroidManifest.xml中找到你所指定的activity 中加上android:configChanges="orientation|keyboardHidden"
    • 然后 在activity的逻辑处理中(代码部分)去重载onConfigurationChanged事件,具体代码参考一下:
      • @Override
          public void onConfigurationChanged(Configuration config) {
            super.onConfigurationChanged(config);
          }
以上就可以简单的控制你的app画面的显示方式并且在显示方式不变的情况下横竖屏切换时不会重新加载画面,即优化的你的app同时用户体验也相应提高了。
2016-04-11 23:20:00 weixin_33737774 阅读数 13

定义手势识别器

获取手势识别器GestureDetector对象,通过new GestureDetector(context,listener),参数:上下文,监听器

匿名内部类实现简单手势监听器SimpleOnGestureListener接口,重写onFling()滑动方法

传递进来四个参数:

MotionEvent e1 MotionEvent e2velocityXvelocityY

e1是第一个点,e2是第二个点,x轴的速度,y轴的速度

当第一个点减去第二个点大于200时,我们认为它是从右往左划,下一页

当第二个点减去第一个点大于200时,我们认为它是从左往右划,上一页

调用MotionEvent 对象的getRawX()可以获取到X轴的坐标

 

使用手势识别器识别手势

重写activityonTouchEvent()方法,获取到手势在界面上的滑动事件

传递进来一个参数MotionEvent对象

调用GestureDetector对象的onTouchEvent(event)方法,参数:MotionEvent对象,把获取到的事件传递进去

 

屏蔽斜着划

两个点的y轴坐标之间的距离大于100时,我们认为它是斜着划的

调用MotionEvent 对象的getRawY()可以获取到Y轴的坐标,两个点的差值取绝对值Math.abs(),判断大于100 就返回true,不往下进行

 

如果找不到SimpleOnGestureListener类,使用new GestureDetector.SimpleOnGestureListener()

 

抽取公用方法到基类抽象类 BaseSecActivity中,自己的activity只需要继承这个基类,实现上下页的抽象方法,就能实现左右滑动效果

BaseSecGuideActivity.java

 

package com.qingguow.mobilesafe;

import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;

public abstract class BaseSecGuideActivity extends Activity {
    // 定义手势识别器
    protected GestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        // 实例化
        gestureDetector = new GestureDetector(this,
                new GestureDetector.SimpleOnGestureListener() {
                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2,
                            float velocityX, float velocityY) {
                        //屏蔽斜着划
                        if(Math.abs(e1.getRawY()-e2.getRawY())>100){
                            return true;
                        }
                        if ((e1.getRawX() - e2.getRawX()) > 100) {
                            System.out.println("从右往左划,下一页");
                            showNext();
                            return true;
                        }
                        if ((e2.getRawX() - e1.getRawX()) > 100) {
                            System.out.println("从左往右划,上一页");
                            showPre();
                            return true;
                        }
                        return super.onFling(e1, e2, velocityX, velocityY);
                    }
                });
    }
    public abstract void showPre();
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        gestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }
    public abstract void showNext();
}

 

2014-03-25 15:51:33 love_heller 阅读数 760
一:不同的layout
Android手机屏幕大小不一,有480x320, 640x360, 800x480.怎样才能让Application自动适应不同的屏幕呢?
其实很简单,只需要在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
二:hdpi、mdpi、ldpi
在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。
  drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:
  (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
  (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
  (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
       (4)drawable-xhdpi 至少960x720

  系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
  在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
三:横坚屏切换
在开发游戏的时候,有些游戏是只能横屏玩的,所以手机竖立放置的时候,要保持游戏画面依然横屏。要做到这个要求其实很简单,
在AndroidManifest.xml里面配置一下就可以了。加入这一行android:screenOrientation="landscape"。
例如(landscape是横向,portrait是纵向):
Java代码
<?xml version="1.0" encoding="utf-8"?>   
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ray.linkit" 
    android:versi 
    android:versi>   
  <application android:icon="@drawable/icon" android:label="@string/app_name">   
    <activity android:name=".Main" 
            android:label="@string/app_name" 
            android:screenOrientation="portrait">   
        <intent-filter>   
          <action android:name="android.intent.action.MAIN" />   
          <category android:name="android.intent.category.LAUNCHER" />   
        </intent-filter>   
    </activity>   
          <activity android:name=".GamePlay" 
          android:screenOrientation="portrait"></activity>   
          <activity android:name=".OptionView" 
          android:screenOrientation="portrait"></activity>   
  </application>   
  <uses-sdk android:minSdkVersion="3" />   
</manifest>   
1.另外,android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,
在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!
2.也可以给每个activity加上android:c属性,就不会重启activity.而是去调用onConfigurationChanged(Configuration newConfig). 这样就可以在这个方法里调整显示方式.
比如
Java代码
if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE){   
  //横向   
  setContentView(R.layout.file_list_landscape);   
}else{   
  //竖向   
  setContentView(R.layout.file_list);   
在做android或者Ophone开发时,在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件在默认情况下会重新加载画面并显示和横评一样的画面,这样会有2个问题,
布局问题,在竖屏 显示的布局到横屏中由于宽和高发生了变化所有多少都会影响到布局(除非你定制2套画面在然后加个判断在横屏时怎么显示,在竖屏时怎么显示),当然最简单的办法就是在项目的 AndroidManifest.xml中找到你所指定的activity 中加上
只竖屏显示的话(android:screenOrientation="portrait")
只横屏显示的话(android:screenOrientation="landscape")
画面重新载入问题:在默认情况下横竖切换时会重新载入画面,导致一些不必要的资源浪费,更严重的是画面上保持的数据(特别是游戏方面)也都被重置了(当然你可以在重置前保存这些数据到数据库或者到文本文件中),要怎么避免在横竖切换时重新载入画面,
首先要在 AndroidManifest.xml中找到你所指定的activity 中加上android:configChanges="orientation|keyboardHidden"
然后 在activity的逻辑处理中(代码部分)去重载onConfigurationChanged事件,具体代码参考一下:
@Override
  public void onConfigurationChanged(Configuration config) {
    super.onConfigurationChanged(config);
  }
以上就可以简单的控制你的app画面的显示方式并且在显示方式不变的情况下横竖屏切换时不会重新加载画面,即优化的你的app同时用户体验也相应提高了。
转载自:http://www.2cto.com/kf/201303/192270.html
没有更多推荐了,返回首页