小编lil*_*die的帖子

理解Android元视口缩放:我缺少什么?

我一直在尝试确定视口 - 以及其中的内容 - 如何受到用于使用WebView或本机浏览器绘制内容的视口元标记的影响.

我遇到的是一些明显的不一致.我创建了一个小页面(见下文),其中包含一个图像和一些用于显示视口大小的javascript,因此我可以直观地看到图像的缩放以及获取确切的数字.

首先,一些观察:

  1. 视口宽度数字都不是我预期的,只是关闭.
  2. 当数字接近设备像素数时,绘图实际上是一对一地完成 - 或者至少看起来是那样的.
  3. 如果页面大小(文档大小)低于视口大小,则视口编号会缩小.也就是说,视口并不总是必然代表最大可能的可见空间 - 只是当前可见空间.
  4. 同样,在本机浏览器中,视口大小由顶部栏调整.当它滚出屏幕时,尺寸会增加.给出的数字用于全屏显示.

设备#1:物理屏幕为1024x600,运行Android 2.2.

  1. initial-scale = 1.0 => 676x400
  2. initial-scale = 1.0,width = device-width => 676x400
  3. initial-scale = 2,width = device-width => 338x200
  4. initial-scale = 2,width = device-width,target-densitydpi = device-dpi => 507x300
  5. initial-scale = 0.5,width = device-width,target-densitydpi = device-dpi => 800x473
  6. initial-scale = 0.9,width = device-width,target-densitydpi = device-dpi => 800x473
  7. width = device-width,target-densitydpi = device-dpi => 1014x600
  8. initial-scale = 1.0,width = device-width,target-densitydpi = device-dpi => 1014x600
  9. initial-scale …

html scaling android

46
推荐指数
1
解决办法
4万
查看次数

哪个更好/更有效:检查错误值或捕获Java中的异常

哪个在Java中更有效:检查错误值以防止异常或让异常发生并捕获它们?

以下是两个示例代码块,用于说明这种差异:

void doSomething(type value1) {
    ResultType result = genericError;

     if (value1 == badvalue || value1 == badvalue2 || ...) {
          result = specificError;
     } else {
          DoSomeActionThatFailsIfValue1IsBad(value1);
          // ...
          result = success;
     }
     callback(result);
}
Run Code Online (Sandbox Code Playgroud)

void doSomething(type value1) {
     ResultType result = genericError;
     try {
          DoSomeActionThatFailsIfValue1IsBad(value1);
          // ...
          result = success;
     } catch (ExceptionType e) {
          result = specificError;
     } finally {
          callback(result);
     }
}
Run Code Online (Sandbox Code Playgroud)

一方面,你总是在进行比较.另一方面,老实说,我不知道系统的内部做什么来生成异常,抛出它,然后触发catch子句.它有效率较低的声音,但如果它不会在非错误情况下增加开销,那么它的平均效率会更高.这是什么?它是否会添加类似的检查?是否在为异常处理添加的隐式代码中检查,即使有额外的显式检查层?也许它总是取决于异常的类型?我不考虑什么?

让我们假设所有"坏值"都是已知的 - 这是一个明显的问题.如果您不知道所有错误的值 - 或者列表太长且不规则 - 那么异常处理可能是唯一的方法.

那么,每种方法的优缺点是什么?为什么?

需要考虑的问题:

  • 如果值在大多数情况下是"坏"(会抛出异常),你的答案会如何变化?
  • 这有多少取决于正在使用的VM的细节?
  • 如果要求语言-X提出同样的问题,答案会有所不同吗?(更一般地说,问题是否可以假设检查值总是比依赖异常处理更有效,因为它增加了当前编译器/解释器的开销.) …

java error-handling optimization performance exception

14
推荐指数
3
解决办法
2557
查看次数

带旋转的Android共享元素转换,可能已损坏?

(请参阅代码后的更新.)

我有一个带有旋转视图的屏幕,我希望将其转换到另一个屏幕,理想情况是使用Android的内置共享元素转换功能.但是,即使旋转相同,设置View旋转时产生的动画也会被破坏.我查看了共享元素转换的各种转换效果,"ChangeTransform"特别提到了旋转(并查看代码确认了这一点).使用它或不使用它具有相同的结果.(也就是说,明确地设置或仅使用默认设置,动画外观的结果没有变化,我将在下面描述.)

那会发生什么?让我举例解释一下.让我们进行两项活动 - 我们将摆脱所有片段,因此我们知道延迟的过渡不会妨碍它们 - 称之为MainActivity和AnotherActivity.MainActivity启动具有共享元素转换的AnotherActivity活动.取两个视图,viewOnene和viewTwo.ViewOne没有轮播.ViewTwo在MainActivity中设置了旋转,但没有设置AnotherActivity.在MainActivity中,两个视图都在左侧,而在AnotherActivity中,两个视图都在右侧.它们有不同的尺寸.

以下是发生的事情:

  • ViewOne将动画调整到目标位置,并适当缩放尺寸.这看起来很好,是预料之中的.
  • ViewTwo弹出无旋转(例如,即时旋转为0),然后动画到目标位置和大小.看起来很可怕.

这是倒退时发生的事情:

  • ViewOne反转动画,一切看起来都很好.
  • ViewTwo动画回到目标位置,有点太大了.然后它会弹出一个略有不同的位置和大小(更大,更奇怪)和目标旋转并平移和缩放到位.这看起来很糟糕.

你可能需要自己看一下.这里:https://youtu.be/cUlVZgmJV_A

我试过直接通过代码更改转换,从样式中查看TransitionSet和引用,结果是一样的.就像转换(无论是来自代码还是XML)一样,转换被分成两半.

我创建了一个小项目来演示,如果需要可以共享整个项目.但是,我怀疑我可能只是遗漏了一些简单的东西,特别是因为一个视图在转换时工作正常.

我期望发生的是旋转随着翻译和规模平稳变化.对于动画师来说,这是相对简单的,但是如果可能的话,我想避免手动创建共享元素转换.

以下是相关文件的相关部分:

MainActivity.java

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final View viewOne = findViewById(R.id.viewOne);
        final View viewTwo = findViewById(R.id.viewTwo);

        viewOne.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, AnotherActivity.class);
                Pair<View, String> viewOneTx = new Pair<>(viewOne, "view_one");
                Pair<View, String> viewTwoTx = new Pair<>(viewTwo, "view_two");

                ArrayList<Pair<View, String>> viewsList = new ArrayList<>();

                viewsList.add(viewOneTx);
                viewsList.add(viewTwoTx);

                ActivityOptionsCompat options;

                //noinspection unchecked …
Run Code Online (Sandbox Code Playgroud)

android android-transitions shared-element-transition

6
推荐指数
0
解决办法
907
查看次数