我正在开发一个应用程序,需要在用户离开应用程序并返回时显示密码屏幕(无论是通过屏幕锁定,还是通过后面或主页按钮返回主屏幕).我使用以下工作:
启动活动将在启动时调用密码检查,并且每个活动都将以下功能添加到其onPause方法中:
@Override
public void onPause() {
super.onPause();
if (!isFinishing()) {
new PasscodeCheckTask(this.getApplicationContext(),this).execute();
}
}
Run Code Online (Sandbox Code Playgroud)
PassocdeCheckTask如下所示.它会检查屏幕是否已关闭或应用程序是否不在后台
public class PasscodeCheckTask extends AsyncTask<Void, Void, Boolean> {
public static final int CHECK_PASSCODE = 0;
private Context mActivityApplicationContext;
private Context mActivityContext;
public PasscodeCheckTask(Context applicationContext, Context activityContext){
mActivityApplicationContext = applicationContext;
mActivityContext = activityContext;
}
@Override
protected Boolean doInBackground(Void... params) {
Boolean result = false;
if (!((PowerManager)mActivityApplicationContext.getSystemService(android.content.Context.POWER_SERVICE)).isScreenOn() ||
!isAppOnForeground(mActivityApplicationContext)) {
result = true;
}
return result;
}
@Override
protected void onPostExecute(Boolean result) {
if (result) { …Run Code Online (Sandbox Code Playgroud) 我有很难的背景纹理.我有一个60px乘60px位图纹理,我想在重复的图块模式中设置为我的布局的背景.这是位于res/layout中的布局xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/dark_texture_background" >
...
</RelativeLayout
Run Code Online (Sandbox Code Playgroud)
这里是dark_texture_background,位于res/drawable中:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/dark_background_texture"
android:tileMode="repeat" />
Run Code Online (Sandbox Code Playgroud)
dark_background_texture是60x60像素的图像.
因此,问题在于纹理图像在被平铺的同时被放大.我在纹理图像的外部添加了一条红线,以准确查看纹理图像的位置,结果如下:

我还根据getResources().getDisplayMetrics()添加了屏幕高度,宽度和密度.
由于屏幕宽度为480像素,因此纹理图像应重复8次(480/60 = 8).相反,只有5~1/4.图像现在约为90像素并平铺.WTF?
当我明确告诉它重复时,为什么我的纹理图像会被拉伸?