2. 修改 Activity 所对应的 Java 代码,使之如下:
package com.pat.gui;
import android.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.GestureDetector.OnGestureListener;
import android.widget.Toast;
public class ScrollPicture extends Activity
implements
OnGestureListener
{
private int X = 0;
private int Y = 0;
private static int scrollX = 0;
private static int scrollY = 0;
PictureView main;
Bitmap bmp;
Bitmap adapt;
Resources res;
Paint paint;
GestureDetector gestureDetector;
DisplayMetrics dm;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
gestureDetector = new GestureDetector(this);
paint = new Paint();
// 获取图像
res = getResources();
bmp = BitmapFactory.decodeResource(res, R.drawable.desktop);
// 获取图像的宽度和高度
X = bmp.getWidth();
Y = bmp.getHeight();
// adapt 是 bmp 显示在屏幕上的那部分图像,见 PictureView 中的 handleScroll 方法
adapt = Bitmap.createBitmap(bmp);
main = new PictureView(this);
// 去掉标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 全屏显示
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
//setContentView(R.layout.main);
setContentView(main, new ViewGroup.LayoutParams(X, Y));
// 以 landscape 方式显示
this.setRequestedOrientation(Configuration.ORIENTATION_LANDSCAPE);
// 获取屏幕尺寸
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
}
// 屏幕翻转时,要重新获取 dm 。要使 onConfigurationChanged 可以被触发,必须做到:
// 1. 在 AndroidManifest.xml 的 Activity 标签中,增加属性 android:configChanges="orientation"
// 2. 在 AndroidManifest.xml ,须增加权限:
//
// 当屏幕显示有 landscape 变成 portrait ,或者有 portrait 变成 landscape 是,都会触发 onConfigurationChanged
@Override
public void onConfigurationChanged(Configuration newConfig)
{
if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE)
{
// 获取屏幕尺寸
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// 重新计算 adapt 。显示 desktop.png 的左上角开始,占整个屏幕尺寸大小的那部分
adapt = Bitmap.createBitmap(bmp, 0, 0, dm.widthPixels, dm.heightPixels);
// scrollX 和 scrollY 分别为在水平或者垂直方向上,滚动的像素值
scrollX = 0;
scrollY = 0;
// 重画
main.invalidate();