精华内容
下载资源
问答
  • 编辑手记:对于数据库的回功能,可能大家都不陌生,那么如何在租户环境使用该功能,如果关闭了表空间的回功能,会给数据库带来哪些影响?我们一起来学习。 本文来自周四大讲堂内容整理。 我们先说一下...

    编辑手记:对于数据库的闪回功能,可能大家都不陌生,那么如何在多租户环境下使用该功能,如果关闭了表空间的闪回功能,会给数据库带来哪些影响?我们一起来学习。

    本文来自周四大讲堂内容整理。


    我们先说一下Flashback这个单词,我们大家常称它为闪回,可能有的人称它为回闪。Flashback 是oracle 9i 版本开始提供的一项特性,利用oracle查询多版本一致的特点,实现从回滚段中读取一定的时间内在表中操作过的数据。

    Flashback Database是Oracle10g的新增功能,在启动Flashback Database之后,它定期将已发生变化的块写入闪回日志的日志文件中。这些日志不是由传统的Log Writer (LGWR) 进程写入,而是由一种称作Recovery Writer (RVWR)的新进程写入。这是Oracle10g的新增进程。

    闪回日志是存储在闪回恢复区(Flash Recovery Area),闪回恢复区简称FRA。配置闪回恢复区,有两个参数:DB_RECOVERY_FILE_DEST和DB_RECOVERY_FILE_DEST_SIZE。


    DB_RECOVERY_FILE_DEST是用来指定FRA的存储路径,可以指定一个文件系统下的路径,也可以指定ASM磁盘组,但是不能将该路径指向一个裸设备。RAC数据库要指定共享存储上。


    DB_RECOVERY_FILE_DEST_SIZE这个参数是指定FRA最大可用空间。建议分配大一些,如果剩余空间不足15%的时候,它将会在alert中增加告警,提示空间不足。但此时不会影响数据库正常运行。

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    可以通过视图V$FLASHBACK_DATABASE_LOG、v$flashback_database_stat查看闪回日志及数据库状态。当需要Flashback Database时,通过Flashback Log中保存的数据,就可以快速将oracle数据库恢复到指定时间点块的状态,然后通过应用重做日志,将数据库恢复到一致状态。

     

    闪回数据库:

    使用闪回数据库,通过还原自先前某个时间点以来发生的所有更改,可快速将数据库恢复到那个时间的状态。因为不需要还原备份,所以此操作速度很快。可以使用此功能还原导致逻辑数据损坏的更改。

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

    使用闪回数据库时,Oracle DB 可使用过去的块映像回退对数据库的更改。在正常数据库操作期间,Oracle DB 会不定期地将这些块映像记录在闪回日志中。闪回日志将按顺序写入并且不进行归档。Oracle DB 会自动在快速恢复区中创建、删除闪回日志和调整它的大小。您仅需出于监视性能目的而关注闪回日志,并确定为快速恢复区分配了多少磁盘空间以存放闪回日志。


    使用闪回数据库倒回数据库所需的时间与需回退到多久以前以及目标时间之后发生的数据库活动量成比例。还原和恢复整个数据库所需的时间会长得多。闪回日志中的前像仅用于将数据库还原至过去的某一时间点,而前滚恢复则用于将数据库恢复到与过去某个时间一致的状态。Oracle DB 可将数据文件恢复至以前的时间点,但辅助文件除外,如初始化参数文件。


    启用闪回数据库功能时,会启动RVWR(闪回写进程)后台进程。此后台进程按顺序将闪回数据库数据从闪回缓冲区写入闪回数据库日志,这些日志会被循环使用。随后,当发出FLASHBACK DATABASE 命令时,系统使用闪回日志还原块的前像,然后使用重做数据前滚到所需的闪回时间。


    启用闪回数据库的开销取决于数据库的读/写混合工作量。因为查询不需要记录任何闪回数据,所以工作量的写操作量越大,启用闪回数据库的开销就越高。可以从v$flashback_database_stat查看在一个时间段内数据库闪回日志记录的信息。

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    在一个END_TIME -BEGIN_TIME时间段内:

    FLASHBACK_DATA记录写闪回日志大小;(单位:字节)

    DB_DATA记录数据库读写大小;(单位:字节)

    REDO_DATA记录redo日志的大小;(单位:字节)

    ESTIMATED_FLASHBACK_SIZE记录预估满足保留时间所需要的空间大小。(单位:字节)

    CON_ID代表的是容器ID。

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    字段含义如下:

    OLDEST_FLASHBACK_SCN 保留的最低系统改变号;
    OLDEST_FLASHBACK_TIME  最低系统改变号的时间;
    RETENTION_TARGET 闪回日志保留时间(单位:时间);
    FLASHBACK_SIZE  当前闪回日志的大小(单位:字节);
    ESTIMATED_FLASHBACK_SIZE 预估满足保留时间所需要的空间大小(单位:字节);

    CON_ID代表的是容器ID。


    闪回日志可以通过参数指定保留时间,db_flashback_retention_target。默认值为:1440 minutes。

     

    实验步骤:

    1、首先,我们开启数据库闪回功能:

    mkdir -p /u01/app/oracle/fast_recovery_area

    alter system setdb_recovery_file_dest_size=10G;

    alter system setdb_recovery_file_dest='/u01/app/oracle/fast_recovery_area' scope=both;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    shutdown immediate;

    startup mount;

    alter database archivelog;

    alter database flashback on;

    alter database open;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查看当前数据库实例状态:

    set lines 200

    col name for a30

    select con_id,name,open_mode from v$pdbs;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    开启PDB实例:

    alter session set container=PERFEADER;

    alter pluggable database PERFEADER open;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    我们来创建测试表空间,测试用户:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查看表所在默认表空间:

    set lines 200

    col TABLE_NAME for a20

    select table_name,tablespace_name fromuser_tables;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查看表的数据量:

    select count(*) from perfeader.test;

    select count(*) from perfeader.test1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查询当前数据库scn:

    select current_scn from v$database;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    删掉表test中20000行数据:

    delete from perfeader.test where rownum<=20000;

    commit;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查询当前数据库scn:

    select current_scn from v$database;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查询当前test表中数据量:

    select count(*) from perfeader.test;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    再向表中插入20行数据,然后commit查询表perfeader.test表的数据量。

    insert into perfeader.test select * fromdba_objects where rownum <= 20;

    commit;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    等一下,测试将数据闪回到scn= 1469627,delete数据之后,insert之前。

    操作

    Scn

    表(TEST)数据量

    表(TEST1)数据量

    Create table


    72612

    38

    Delete test 数据


    52612

    38

    commit

    1469627



    Insert test 数据


    52632

    38

    Commit





    查询开启闪回的表空间:

    select * from v$tablespace;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    接下来查看数据库是否开启闪回:

    select flashback_on from v$database;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    关闭表空间test的闪回:

    alter tablespaceTEST flashback off;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    关闭数据库,闪回数据库到scn=1469627:

    conn / as sysdba

    shutdown immediate

    startup mount

    flashback database to scn 1469627;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    这个时候,我们能够看到闪回报错为无法闪回数据文件13,没有闪回日志。

     

    开启数据库,开启表空间test闪回,需要在PDB实例开启:

    alter session set container=PERFEADER;

    alter tablespace TEST flashback on;

    conn / as sysdba

    alter database open;

    alter session set container=PERFEADER;

    select * from v$tablespace;

     

    要切换到perfeader实例,才可以开启表空间test01的闪回:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    我们再创建一个表空间test01,测试关闭该表空间的闪回功能,是否会有不一样的报错?

     

    开启pdb实例,创建表空间test01:

    alter pluggable database PERFEADER open;

    create tablespace TEST01 datafile'/u01/app/oracle/oradata/PROD/test01_01.dbf' size 100M autoextend on;

    alter tablespace TEST01 flashback off;

    select * from v$tablespace;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    闪回到表空间test的delete数据的时间点scn=1469627

    conn / as sysdba

    shutdown immediate

    startup mount

    flashback database to scn 1469470;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    可以发现,表空间TEST01是关闭闪回功能的,我们闪回到test01表空间创建之前的时间点也是无法闪回的。我们可以看出闪回日志中的表空间必须是连续,而且没有表空间是关闭闪回的。

     

    问题1:关闭表空间的闪回功能,会给出什么告警信息?

    结论:如果数据库中有表空间没有开启闪回,将告警显示没有该表空间的闪回日志可以闪回。无论是在开启数据库闪回之前,还是之后,都将会报没有闪回日志。说明,如果在一个连续的数据库闪回日志,该闪回日志过程中某一个表空间关闭了闪回,都将无法将数据库闪回到之前的某一时间点。

     

    开启数据库,还是相同的步骤重新创建用户,表空间及表:

    create tablespace TEST02 datafile '/u01/app/oracle/oradata/PROD/test02_01.dbf'size 100M autoextend on;

    create user allen identified by allendefault tablespace TEST02 account unlock;

    grant dba to allen;

    conn allen/allen@perfeader

    create table allen.test as select * fromdba_objects;

    create table allen.test1 tablespace usersas select * from dba_users;

     

    查看表所在表空间:

    select table_name,tablespace_name fromuser_tables;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查看该表空间中表的数据:

    select count(*) from allen.test;

    select count(*) from allen.test1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    先关闭表空间TEST02闪回功能,稍后闪回的时候我们将不闪回该表空间:

    alter tablespaceTEST02 flashback off;

     

    查看perfeader 用户,users表空间下表TEST1的数据:

    select count(*) from perfeader.TEST1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    从perfeader用户表TEST1中删除一条数据:

    delete from perfeader.TEST1 whereUSERNAME='SYSTEM';

     

    COMMIT后查看当前数据库SCN:

    COMMIT;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    删除1行之后commit,查询SCN号,这个时候perfeader.test1表有37行,TEST没有改变.

    操作

    Scn

    表(TEST)数据量

    表(TEST1)数据量

    Create table


    72612

    38

    Delete test 数据


    52612

    38

    commit

    1469627



    Insert test 数据


    52632

    38

    Commit




    Delete test1 数据


    52632

    37

    Commit

    1470592




    这时,我们又向allen用户下的表TEST,TEST1都插入数据,使其状态改变。

    查询allen用户下表test,test1的数据量:

    select count(*) from allen.test;

    select count(*) from allen.test1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    第一步插入表test1:

    insert into allen.TEST1  select * from allen.TEST1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    commit查询test,test1表的数据:

    commit;

    select count(*) from allen.TEST;

    select count(*) from allen.TEST1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查询当前scn:

    select current_scn from v$database;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

     

    第二步插入表test2:

    insert into allen.TEST  select * from allen.TEST;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    commit查询test,test1表的数据:

    commit;

    select count(*) from allen.TEST;

    select count(*) from allen.TEST1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    select current_scn from v$database;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    第三步插入表test1,test2:

    insert into allen.TEST  select * from allen.TEST;

    insert into allen.TEST1  select * from allen.TEST1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    commit查询test,test1表的数据:

    commit;

    select count(*) from allen.TEST;

    select count(*) from allen.TEST1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    select current_scn from v$database;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    变化之后的数据,我们可以看一下下面的表格:

    perfeader用户:

    操作

    Scn

    表(TEST)数据量

    表(TEST1)数据量

    Create table


    72612

    39

    Delete test 数据


    52612

    38

    commit

    1469627



    Insert test 数据


    52632

    38

    Commit




    Delete test1 数据


    52632

    37

    Commit

    1470592



    allen用户:

    操作

    Scn

    表(TEST)数据量

    表(TEST1)数据量

    Create table


    72631

    39

    Insert test1 数据后


    72631

    78

    commit

    1470812



    Insert test 数据后


    145262

    78

    Commit

    1470885



    Insert test,test1 数据后


    290524

    156

    Commit

    1470968




    insert test插入数据后这个时候allen用户下的表的数据是test(145262),test1(78),而perfeader用户下的数据是test(52632),test1(37)。

     

    等一下,测试将数据闪回到scn=1470812。

    我们再测试一下,test02表空间没有开启闪回功能,会报什么错误。

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    关闭数据库,启动数据库到mount,闪回数据库,scn= 1470812:

    flashback database to scn 1470812;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    闪回数据库表空间allen用户insert test数据后commit时间点,还是会报无test02_1.dbf闪回日志:

    flashback database to scn 1470885;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    尝试一下在pdb做闪回,告诉我们不允许在插入的数据库做闪回:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查看当前闪回日志中的信息发现,闪回最老的时间点是开启闪回数据库功能的时间:

    alter session set nls_date_format='yyyy-mm-ddhh24:mi:ss';

    select * from v$FLASHBACK_DATABASE_LOG;

    select * from v$flashback_database_stat;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    下面我们验证,将关闭闪回功能的表空间offline,是否能够闪回数据库?

    alter database open;

    alter session set container=PERFEADER;

    alter pluggable database PERFEADER open;

    alter tablespace TEST02 offline;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查询表空间online状态:

    select TABLESPACE_NAME,status,ONLINE_STATUSfrom dba_data_files;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    切换到CDB$ROOT实例,关闭数据库并闪回数据数据库到scn=1470812。 

    conn / as sysdba

    shutdown immediate

    startup mount

    flashback database to scn 1470812;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    当open数据库时,会提示是RESETLOGS开启,还是NORESETLOGS方式:

    alter database open;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    如果以RESETLOGS方式打开数据库:

    alter database open RESETLOGS;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    切换到PDB实例perfeader,并open:

    alter session set container=PERFEADER;

    select open_mode from v$database;

    alter pluggable database PERFEADER open;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    下面是从alert日志来看,数据库是使用归档日志、REDO日志恢复到SCN= 1470812+1:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    打开redo日志前滚:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    12c会依次打开undo表空间:CDB$ROOT->PDB$SEED-> PERFEADER

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    打开数据库perfeader,报ORA-01110错误:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    当查看表空间test02的数据文件状态时,还是offline,并且闪回功能还是关闭的:

    set lines 200 pages 200

    col name for a53

    selectfile#,name,status,checkpoint_change#,last_change# from v$datafile;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    当查询test02表空间下的数据会报无法读取数据文件test02_01.dbf,报错如下:

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    如果以NORESETLOGS方式open数据库,会报如下错误:

    SQL> alterdatabase open NORESETLOGS;

    alter databaseopen NORESETLOGS

    *

    ERROR at line 1:

    ORA-01610:recovery using the BACKUP CONTROLFILE option must be done

     

    当recovery数据库后,这时可以open数据库了:

    SQL> recoverdatabase;

    Media recovery complete.

    SQL> alterdatabase open;

    Database altered.

     

    接下来我们验证问题2.

    问题2:关闭“表空间”的闪回,是否还可以闪回数据库?


    以open noresetlogs或者open noresetlog方式打开后,如果想要恢复被offline的表空间需要进行以下recover 数据文件步骤:

    ALTER DATABASE CREATE DATAFILE 15 AS'/u01/app/oracle/oradata/PROD/test02_01.dbf';

    recover datafile 15;

    alter database datafile 15 online;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    最后查看一下数据文件,表空间的状态: 

    select file#,name,status,checkpoint_change#,last_change#from v$datafile;

    select * from v$tablespace;

    select file#,status,recover,CHECKPOINT_CHANGE#from v$datafile_header;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    可以看到15号数据文件test02_01.dbf的检查点是比其他的数据文件检查点大。

     

    查询test02表空间下的数据已经闪回到scn=1482450时间点:

    select count(*) from allen.test;

    select count(*) from allen.test1;

    640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


    查看闪回后的数据,allen.TEST表的数据是72631,TEST1的数据是78。正是scn=1470812时间点的数据。

     

    结论:是可以做到表空间关闭了闪回功能,而其他的表空间没有关闭闪回功能,将关闭闪回的表空间offline后,可以将数据库闪回到指定的时间点,而数据库闪回后需要将关闭闪回的表空间数据文件recover,并online该表空间,数据就可以恢复到指定的时间点。

     

    总结:

    序号

    问题

    结果

    1

    关闭表空间的闪回功能,闪回数据库会给出什么告警信息?

    如果数据库中有表空间没有开启闪回,将告警显示没有该表空间的闪回日志可以闪回。无论是在开启数据库闪回之前,还是之后,都将会报没有闪回日志。说明,如果在一个连续的数据库闪回日志,该闪回日志过程中某一个表空间关闭了闪回,都将无法将数据库闪回到之前的某一时间点。

    2

    关闭“表空间”的闪回,是否还可以闪回数据库?

    是可以做到表空间关闭了闪回功能,而其他的表空间没有关闭闪回功能,将关闭闪回的表空间offline后,可以将数据库闪回到指定的时间点,而数据库闪回后需要将关闭闪回的表空间数据文件recover,并online该表空间,数据就可以恢复到指定的时间点。



    文章转自数据和云公众号,原文链接

    展开全文
  • 最近公司产品定了新需求,是按照多闪主页面左右两侧滑动效果以及伴随动画。... 大家可以看一下多闪的主页面效果,是由中间的底层,加左右两边抽屉组成,另外在最上层有三button随着页面变化而变...

    最近公司产品定了新需求,是按照多闪主页面左右两侧滑动效果以及伴随动画。看了多闪主页面效果,感觉用自定义控件比较合适,但是就怕自己做的不太完善,就想着用Android原生的DrawerLayout(抽屉布局)来实现。忙完这一阵想再用自定义的方法试一下,顺便回顾下自定义控件。

    大家可以看一下多闪的主页面效果,是由中间的底层,加左右两边抽屉组成,另外在最上层有三个button随着页面变化而变化,来显示现在呈现给用户的具体是哪个界面。

    使用DrawerLayout实现遇到几个小问题,一一来说。
    第一,就是DrawerLayout可以实现左右抽屉,但是默认不能滑到底不能覆盖全屏,查了一下资料发现抽屉滑动之后距离屏幕边缘是65dp,所以将左右布局的margin设置为-65dp

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white">
    
        <android.support.v4.widget.DrawerLayout
            android:id="@+id/drawer_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <RelativeLayout
                android:id="@+id/rl_main"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
            </RelativeLayout>
    
            <RelativeLayout
                android:id="@+id/rl_left"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/red"
                android:layout_gravity="start"
                android:layout_marginRight="-65dp">
    
            </RelativeLayout>
    
            <RelativeLayout
                android:id="@+id/rl_right"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/blue"
                android:layout_gravity="end"
                android:layout_marginLeft="-65dp">
    
            </RelativeLayout>
    
        </android.support.v4.widget.DrawerLayout>
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="150dp"
            android:layout_alignParentBottom="true">
    
            <ImageView
                android:id="@+id/iv_main"
                android:layout_width="65dp"
                android:layout_height="65dp"
                android:src="@drawable/db_speak_selected"
                android:layout_centerHorizontal="true"
                android:layout_alignParentBottom="true"
                android:layout_marginBottom="54dp"/>
    
        </RelativeLayout>
    </RelativeLayout>
    

    第二 代码设置全屏可以滑动的时候会有问题,因为我的主页面也有滑动效果,和主页面效果冲突,所以我就禁用了滑动抽屉,改为按钮式抽屉,下面介绍一下双侧抽屉出现的问题:

    //左侧抽屉支持全屏滑动
    //setDrawerLeftEdgeSize(this , mDrawerLayout , 1 , "mLeftDragger");
    //右侧抽屉全屏滑动
    //setDrawerLeftEdgeSize(this , mDrawerLayout , 1 , "mRightDragger");
    
    //左边开关
        public void toggleLeftLayout(){
            if(mDrawerLayout.isDrawerOpen(mLeftRl)){
                mDrawerLayout.closeDrawer(mLeftRl);
            }else{
                mDrawerLayout.openDrawer(mLeftRl);
            }
        }
    
        //右边开关
        public void toggleRightLayout(){
            if(mDrawerLayout.isDrawerOpen(mRightRl)){
                mDrawerLayout.closeDrawer(mRightRl);
            }else{
                mDrawerLayout.openDrawer(mRightRl);
            }
        }
    
        /**
         * 设置抽屉全屏滑动
         */
        private void setDrawerLeftEdgeSize (Activity activity, DrawerLayout drawerLayout, float displayWidthPercentage , String value) {
            if (activity == null || drawerLayout == null) return;
            try {
                // 找到 ViewDragHelper 并设置 Accessible 为true
                Field leftDraggerField = drawerLayout.getClass().getDeclaredField(value);//Right
                leftDraggerField.setAccessible(true);
                ViewDragHelper leftDragger = (ViewDragHelper) leftDraggerField.get(drawerLayout);
    
                // 找到 edgeSizeField 并设置 Accessible 为true
                Field edgeSizeField = leftDragger.getClass().getDeclaredField("mEdgeSize");
                edgeSizeField.setAccessible(true);
    
                int edgeSize = edgeSizeField.getInt(leftDragger);
                // 设置新的边缘大小
                Point displaySize = new Point();
                activity.getWindowManager().getDefaultDisplay().getSize(displaySize);
                edgeSizeField.setInt(leftDragger, Math.max(edgeSize, (int) (displaySize.x * displayWidthPercentage)));
            } catch (NoSuchFieldException e) {
                Log.i(TAG , "NoSuchFieldException ==== " + e.toString());
            } catch (IllegalArgumentException e) {
                Log.i(TAG , "IllegalArgumentException ==== " + e.toString());
            } catch (IllegalAccessException e) {
                Log.i(TAG , "IllegalAccessException ==== " + e.toString());
            }
        }
    

    setDrawerLeftEdgeSize方法是设置全屏滑动的,但是问题就在于我们是双侧抽屉,我就调用了两次,于是第二次,也就是右侧的滑动效果覆盖了左侧的,我怎么滑动都只是右侧弹出来。做Demo的时候我还以为是出bug了,多试了几次,想了下应该是两个滑动冲突了。后来注释了一个,只测试左侧抽屉的时候效果也不是很好。因为我底层页面也有滑动事件,所以就先停掉了滑动切换抽屉,另外 toggleLeftLayout 和 toggleRightLayout 两个方法是按钮打开关闭抽屉。

    另外开关抽屉和按钮联动的动画我就不贴代码了,注意一点不要用简单的平移动画,因为点击事件不会跟着

    总结:最后整合到app上的效果还是非常好的,产品很满意,就是缺少了滑动切换页面,整体效果没有那么好,有时间还是自定义研究一下吧

    展开全文
  • 你有没有注意到,当EA Games发行一新的头衔他们经常同时发布游戏从每PS3游戏平台任天堂的DS? 有这些设备的能力的巨大... 关于IE6的支持搁置问题,我们似乎是在一美妙的情况,我们有浏览器的收集能力,所有的C...

    css3sparkle

    您是否注意到,EA游戏发行新游戏时,他们经常同时为从PS3到Nintendo DS的每个游戏平台发行游戏?

    这些设备的功能存在巨大差异,但它们会根据不同的游戏进行调整。 他们在维持游戏核心体验,主题和品牌的同时改变了视觉设计和游戏玩法。 他们专注于为每个客户提供所选游戏设备的最佳体验。

    我可以将其与CSS开发联系起来。 除了有关IE6支持的问题外,我们似乎处于一种奇妙的境地,我们拥有功能强大的浏览器集合,所有浏览器均具有相当程度的CSS2.1支持:Safari,Firefox,Opera,Chrome和Internet Explorer。 实际上,这是我第一次记得有5种浏览器可用,它们都具有成熟且兼容的CSS支持级别。

    在过去的几年中,最佳实践CSS的开发已从正常退化过渡到逐步增强。 在现代浏览器的进步和旧版本浏览器的消亡的鼓舞下,人们对现在可能发生的事情的兴趣日益增加。 越来越多的设计师正在考虑如何在不冒险兼容的情况下为每种浏览器提供最佳的用户体验。

    这是我最近遇到的一些示例:

    通过媒体查询,可以根据显示网页的设备的功能来精确控制CSS规则的应用方式。 可以查询设备的宽度,颜色,分辨率等。 Reinhold Weber演示了如何结合使用媒体查询和CSS3列,从而为Firefox,Safari和Chrome用户提供最佳体验。 该技术根据屏幕宽度增加文本列的数量。

    乔纳森·斯努克(Jonathan Snook)在Safari,Chrome和最新版的Firefox中使用CSS3转换扩展演示了文本旋转技巧。 作为奖励,他还演示了通过使用专有的Microsoft filterproperty,您还可以支持Internet Explorer。

    蒂姆·布朗(Tim Brown)在Safari中获得了纯CSS文本渐变效果,而马库斯·斯唐格(Markus Stange)在他的文章“ 与盒子阴影一起玩乐”中对盒子阴影感到有些乐趣。 Markus在Firefox 3.5中为按钮产生了一些令人印象深刻的效果,并且在Safari和Chrome中还对框阴影提供了一些支持。

    在Adobe AIR应用程序中使用了-webkit-box-sizing属性,以强制元素采用100%的宽度,同时排除其边框和内边距的宽度。 通常,边框和填充会将元素的宽度扩展到大于100%-这是经常遇到的麻烦。 现在, James Hopkins解释说,box-sizing属性已广泛支持浏览器。

    Chrome一直支持CSS文本阴影 (Safari(自1.1版开始)提供了更长的支持),而最新版本的Firefox和Opera现在支持CSS文本阴影 Westciv有一个出色的CSS文本阴影生成工具 ,您可以使用它。 您还可以使用Safari和Chrome当前支持的CSS渐变生成工具 ,获得一些乐趣。

    列表继续: 圆角自定义字体RGBA颜色 这肯定令人兴奋!

    但是,尽管令人兴奋,但仍必须具有成本效益才能值得付出努力。 因此,我想听听是否有人在日常工作中以任何方式使用渐进式CSS增强功能? 如果您在客户工作中这样做,您如何将创意出售给客户? 如果客户可以在一个浏览器中看到演示的增强功能,他们是否在所有浏览器中都要求它? 如果您有任何现场示例,请告诉我们您的做法。

    From: https://www.sitepoint.com/add-more-sparkle-with-css3/

    展开全文
  • [img]http://dl2.iteye.com/upload/attachment/0105/4263/b621f00a-2f59-3be9-bd0b-44b93c512070.jpg[/img]  移动游戏作为移动互联网最具变现能力的产品... 行业的快速发展让越来越的创业者投入到移动游戏的...
    [img]http://dl2.iteye.com/upload/attachment/0105/4263/b621f00a-2f59-3be9-bd0b-44b93c512070.jpg[/img]
      移动游戏作为移动互联网最具变现能力的产品形态,是一种创新和文化元素相结合的产品,许多怀揣着梦想的年轻人都希望投身移动游戏的产业中来。

      行业的快速发展让越来越多的创业者投入到移动游戏的创业大潮中,在大部分刚成立的手游团队中最缺少的除了资金不足之外,还有渠道、IP等反面的支持。本期活动将邀请游戏行业的资深投资人担任评委和优秀的游戏创业团队,通过项目路演,寻找最有潜力的项目和创业者,并优先获得投资机会。

      在2015年2月3日,天使汇2015年月度项目路演活动将由龙图游戏旗下9秒社团和天使汇共同策划举办。

      [b]本期主题:[/b]手游创业项目路演-寻找下一个《刀塔传奇》

      本期路演活动将聚焦移动游戏的创业项目,所有项目需要通过9秒社团注册,通过天使汇进行初步筛选。

      [b]【主办单位】[/b]
      龙图游戏旗下9秒社团,天使汇
      [b]【投资机构】[/b]
      龙图游戏、天使汇、9秒闪投、边锋游戏、神州泰奇、极客邦、开心农场、洋葱基金等将近50多个投资机构参与。
      [b]【活动时间】[/b]
      2015年2月3日(周二)09:00am-16:00pm
      [b]【活动地点】[/b]
      天使汇3层路演中心,即北京海淀区天使汇大楼(原海淀图书城10号楼)
      [b]【活动规模】[/b]
      邀请天使汇平台投资人将近50多人,游戏创业者团队5-10组,名额有限,报名从速。
      [b]【活动流程】[/b]
      9:30-10:00  签到
      10:00-12:30 项目路演 5分钟展示+10分钟投资人提问
      12:30-13:00 午餐
      13:00-16:00 一对一约谈

      [b]天使汇创投[/b]
      天使汇Speed Dating 闪投,致力于让优秀的项目遇见智慧的投资人。从10月31日到现在,天使汇共举办了 4 期 Speed Dating 闪投,37 个项目,203 位投资人,平均每个项目路演结束拿到 8 位投资人意向,平均40% 的项目一周内完成融资。

      [b]9秒社团[/b]
      9秒社团创立于2011年,目前拥有开发者30万余人,是国内最大的开源游戏开发者社区和国内领先的移动开发者社区,主要以原创的开源内容为核心推动力。目前社区内有十余个自研开源的服务器端框架、游戏引擎、手机游戏、网页游戏、移动应用、HTML5等项目,总部署超过200万次。

      [b]【路演团队参与方法和报名方式】[/b]
      [b]报名截止:[/b]2015年1月29日18:00
      [b]联系我们:[/b]9miaoshetuan@longtugame.com
      [b]联 系 人:[/b]绿竺
      [b]联系电话:[/b]13691144026
      [b]联 系 QQ:[/b]417950430

      [b]【路演团队参与方法和报名方式】[/b]
      请将您的“项目介绍PPT”发送至官方邮箱:9miaoshetuan@longtugame.com,并在邮件内标注上“提交人或团队成员人数及姓名+手机号码+单位或团队名称及所在地+是否有Demo+职务+联系邮箱”。
      [b]邮件标题:[/b]寻找下一个《刀塔传奇》产品Demo
      [b]报名截止:[/b]2015年1月29日18:00

      [b]小提示[/b]
      1、请保证您提供的email地址和手机号码无误,我们会在2月2日前发送确认函和确认短信。
      2、如果您在2月1日仍未收到确认函,可致电 13691144026 进行咨询,欢迎小伙伴们踊跃参与。
    展开全文
  • 替换上是需要加后缀,例如"和平精英"包名为:com.tencent.tmgp.pubgmhd,那么多开框架的包名更改为:com.tencent.tmgp.pubgmhd.ext或者直接☞com.tencent.tmgp.pubgmhd0123后缀阿拉伯数字英文字母随意输入也可以加...
  • 点击tomcat的startup.bat一而过

    千次阅读 2012-04-13 12:09:53
    本来这东西很容易的,原来也是解压之后就直接用,没有遇到过问题,但是。。。又是但是。 出现了点击startup.bat时一而过的现象,只好找到...原来分号;这里我就不上传图了。 也就是说JAVA_HOME配错了,配
  • 只要使用clipping node 就能实现,网上搜了有很cocos2dx的版本,但是没有lua的版本,就翻译了一下 最终实现的效果跟图上一样就不重新上传效果图了 game_title.png: spark.png: 附上代码: local ...
  • 这里需要在官网下载tomcat解压版,解压到此目录,解压完只有进入bin目录,如图所示: 用红色方块圈起来的几文件是之后需要注意的,此时点击 tomcat8.exe 一而过,并没有成功运行...
  • 第17届ChinaJoy(简称CJ) 在上海浦东新国际博览中心举行 腾讯云在CJ展馆 搭了一“云端咖啡厅” 腾讯云服务了国内超过一半的游戏客户,也助力中国游戏厂商走出国门,在全球提供云服务。云端咖啡厅,展示...
  • 解析频成像原理

    2021-01-19 19:52:20
    运动MEMS器件的运动频率都相当高,一般在50...此时,如果用一的光来照明周期运动的MEMS器件,则在MEMS器件的运动频率与闪光频率相等时,就相当于闪光灯“冻结”在某个位置上,这样,通过次曝光即
  • Vista之家(www.vista123.com):游浏览器 0.45发布下载:超...游的0.5版本将在下周末推出,会加入全新的几功能,智能填表等等,同时,游的新界面正在设计制作当中,论坛和群里的朋友应该软媒团队会用最短
  • 回版本

    2016-09-15 10:24:24
    oracle回版本查询提供了审计行数据变化的功能 ,可以跟踪一条记录在一段时间内的变化情况,即一条记录的多个提交版本信息(一事物对应一条记录的操作结果就是该记录的一版本),从而为数据的等级恢复提供了...
  • Win7虽然快,但这是以损耗我们的硬件作为代价的,特别是Win7系统中内置的几种系统服务,对普通用户没有大的用处,但是却频繁地读写硬盘,堪称“硬盘杀手”,即便是系统启动一段时间后,硬盘灯也常常会狂不已。...
  • Win7虽然快,但这是以损耗我们的硬件作为代价的,特别是Win7系统中内置的几种系统服务,对普通用户没有大的用处,但是却频繁地读写硬盘,堪称“硬盘杀手”,即便是系统启动一段时间后,硬盘灯也常常会狂不已。...
  • Win7虽然快,但这是以损耗我们的硬件作为代价的,特别是Win7系统中内置的几种系统服务,对普通用户没有大的用处,但是却频繁地读写硬盘,堪称“硬盘杀手”,即便是系统启动一段时间后,硬盘灯也常常会狂不已。...
  • 图(c)的工作原理与图(b)基本相同,只是增设2LED晶体管图(d)的振荡器是采用NE555定时器的LED闪光电路,LED的亮灭时间为50%,用于各种电子设各的告警电路。由于NE555的输出较小,因此,采用VT1将其输出放大...
  • Win7虽然快,但这是以损耗我们的硬件作为代价的,特别是Win7系统中内置的几种系统服务,对普通用户没有大的用处,但是却频繁地读写硬盘,堪称“硬盘杀手”,即便是系统启动一段时间后,硬盘灯也常常会狂不已。...
  • 考核光源对人眼影响时,不可避免会提到... 图中,黑色圆盘上一白点,圆盘转动时,无频闪照明条件下会出现图a的连续变化,在波动频光源,会出现图b现象。    频造成原因  光源频实质上就是光
  • 正常情况不会升级到块级锁或表级锁(不过两段提 交期间的一段很短的时间内除外,这是一不常见的操作)。 如果只是读数据,Oracle 绝不会对数据锁定。不会因为简单的读操作在数据行上锁定。     2.Oracle ...
  • 破解照 不说那么废话,不说那么原理,直接讲实际的,上操作步骤: 1.电脑下载模拟器(我是联想电脑,所以下载的:联想...5.再用鼠标去一直按住照,会倒计时五秒,再用一手指按C(即Ctrl+Alt+C截屏),只要
  • 在使用python线程对图像进行处理时,可能会出现要显示的图像一而逝的问题,而又没有任何报错。这应该是线程阻塞导致的。也许是你在循环指令下面建立了线程,从而会导致开启太的线程。别说加锁了,似乎就算不...
  • 运动MEMS器件的运动频率都相当高,一般在50...此时,如果用一的光来照明周期运动的MEMS器件,则在MEMS器件的运动频率与闪光频率相等时,就相当于闪光灯“冻结”在某个位置上,这样,通过次曝光即
  • 闪耀光栅 (DMD) 的衍射效应

    千次阅读 2020-06-08 13:28:16
    首先我们介绍单缝衍射、多缝衍射和光栅方程,然后讨论闪耀光栅,最后仿真给出不同入射角的闪耀判据和光栅光谱的二维模拟。 DMD微镜翻转状态 现在wavefront shaping (WFS) 的实验采用数字微镜阵列(DMD),可用于...
  • 雾霾影响绝缘子的络电压变低,更易发生污,威胁电力系统的稳定运行。雾霾中含有不同的离子,故在高压实验室模拟了不同盐分的绝缘子污。以络电压为因变量,以所加电压、加压时间、泄露电流为自变量,分别建立3种...
  • arcmap制作地密度专题图

    千次阅读 2017-11-14 14:21:14
    arcmap制作地密度专题图最近需要制作地密度专题图,笔者现有数据是历年闪电定位数据资料以及省的shape地图,在次记录遇到的问题及解决方法。 1、历年闪电定位数据资料有70W条 闪电定位数据资料经纬度数据...
  • Keil RTE 闪灯程序

    2021-04-02 11:06:41
    手头有2块STM32F4的开发板,计划找RTOS测试。UCOS的STM32例程很,但手头找到的总觉得稳定性不太好。发现keil自带RTX操作系统,但必须根据RTE创建,所以计划先点灯耍耍。(没找到例程,LED初始化的代码和点灯...
  • 优手柄 v3.7.6.1854

    2019-10-31 19:54:41
    7.开多个程序自动分别控制不同手柄 8.支持手柄的按放切换 9.手柄检测功能,手柄插入和拨出,优手柄第一时间察觉 10.直观的界面视觉,手柄的任意按键按,在界面上都有对应显示 11.针对不同游戏或任务可设置...
  • <div><p>东西是很好很好的...那种从dark模式子跳出纯白背景实在太刺眼啦,试了好多个标签页扩展都是这样。不知有没有办法让它不那一下。</p><p>该提问来源于开源项目:Kenshin/simptab</p></div>
  • 文章目录考试复盘孤独的解锁者闪耀的灾星奇怪的数列 考试复盘 不要拦着我让我去找哆啦A梦借时光机,冲回去掐死我这XX ...第二题,计算几何,人直接整傻, 第三题,堆和主席树,想得八九不离十了吧,但是
  • 灯灯:是我小孩学说话时会说的第一词,也是我在想了很项目名后,小孩一语点破的一名字,灯灯象征着光明,给矛盾的我们带来希望,给加班夜归的程序员们指引前方〜 灯灯(简称灯,英文名:lamp),他是一项目...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 870
精华内容 348
关键字:

下个多闪