Activity相关的技巧和特效

本文介绍了Android开发中关于Activity的一些实用技巧和特效实现方法,包括全屏显示、定制窗口标题栏、添加Splash启动画面及窗口截屏等功能的具体实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity相关的技巧和特效(未完待续)

一、全屏显示(隐藏标题栏和状态栏)

1、在AndroidManifest.xml的配置文件里面的标签添加属性:
android:theme=”@android:style/Theme.NoTitleBar.Fullscreen”

2、在Activity的onCreate()方法中的super()和setContentView()两个方法之间加入下面两条语句:
this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息栏

二、定制窗口标题栏

  • 直接修改标题栏上的控件
  • 修改窗口主题
  • 修改标题栏的布局文件
  • 隐藏标题栏、完全在窗口布局中模拟标题栏

三、为程序添加Splash

目前,多数应用程序为了在启动时显示公司、产品或者开发者等相关信息,都会有一个Splash界面。在Splash界面等待的同时,也可以预加载数据、系统检测等操作。有两种方法可以实现”Splash启动画面“效果,下面说一下原理:

其一,两个Activity,通过设置Handler类postDelayed()方法的参数来延迟第二个Activity的显示,经过设定的时间后跳转到第二个Activity界面,这种方法也是最常用的。

其二,一个Activity,程序启动时显示启动画面,启动后使用setVisibility(View.GONE)将启动画面隐藏起来。但是,当Activity中要显示的内容较多时,该方法就会影响程序的性能。

四、窗口截屏

首先通过下面的函数获取Bitmap格式的屏幕截图:

public Bitmap myShot(Activity activity) {
    // 获取windows中最顶层的view
    View view = activity.getWindow().getDecorView();
    view.buildDrawingCache();

    // 获取状态栏高度
    Rect rect = new Rect();
    view.getWindowVisibleDisplayFrame(rect);
    int statusBarHeights = rect.top;
    Display display = activity.getWindowManager().getDefaultDisplay();

    // 获取屏幕宽和高
    int widths = display.getWidth();
    int heights = display.getHeight();

    // 允许当前窗口保存缓存信息
    view.setDrawingCacheEnabled(true);

    // 去掉状态栏
    Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0,
            statusBarHeights, widths, heights - statusBarHeights);

    // 销毁缓存信息
    view.destroyDrawingCache();

    return bmp;
}

得到bitmap格式的图片后,可以把它保存到sd卡中,也可以用下面的方式直接显示到ImageView上:

// 将bitmap转换成drawable

    BitmapDrawable bd=new BitmapDrawable(myShot());
    imageView.setBackgroundDrawable(bd);   
    imageView.setImageBitmap(myShot());

如果想写入sd中保存,可以使用下面的方法:

private void saveToSD(Bitmap bmp, String dirName,String fileName) throws IOException {
    // 判断sd卡是否存在
    if (Environment.getExternalStorageState().equals(
            Environment.MEDIA_MOUNTED)) {
        File dir = new File(dirName);
        // 判断文件夹是否存在,不存在则创建
        if(!dir.exists()){
            dir.mkdir();
        }

        File file = new File(dirName + fileName);
        // 判断文件是否存在,不存在则创建
        if (!file.exists()) {
            file.createNewFile();
        }

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(file);
            if (fos != null) {
                // 第一参数是图片格式,第二个是图片质量,第三个是输出流
                bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
                // 用完关闭
                fos.flush();
                fos.close();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

dirName是输出的文件夹名称,filaName是输出的文件名,两者共同组成输出的路径,如“ /mnt/sdcard/pictures/shot.png”。还要注意在AndroidManifest中注册写入权限:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值