小编Che*_*eng的帖子

通过扩展具体的父母有抽象的孩子的目的

有时,我遇到了一些课堂设计如下.

abstract class animal {
    public abstract void speak();
}

class dog extends animal {

    @Override
    public void speak() {
        // Do something.
    }

}

abstract class abstract_dog extends dog {
    @Override
    public abstract void speak();
}
Run Code Online (Sandbox Code Playgroud)

我想知道,abstract_dog上课的目的是什么?为什么我们将非抽象说话方法"转换"为抽象说法?

java oop

6
推荐指数
1
解决办法
151
查看次数

在IF ELSE块中安装InstallDir

我尝试从以下代码

; The default installation directory
InstallDir $PROGRAMFILES\${PRODUCT_NAME}
Run Code Online (Sandbox Code Playgroud)

!include x64.nsh
${If} ${RunningX64}
    ; The default installation directory
    InstallDir $PROGRAMFILES\${PRODUCT_NAME}
${Else}
    ; The default installation directory
    InstallDir $PROGRAMFILES64\${PRODUCT_NAME}
${EndIf}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误: -

!insertmacro: _If
Error: Can't add entry, no section or function is open!
Error in macro _RunningX64 on macroline 2
Error in macro _If on macroline 9
Error in script "C:\Users\yccheok\Desktop\mysoftware.nsi" on line 17 -- aborting creation process
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以InstallDir在if else块中设置值?

nsis

6
推荐指数
1
解决办法
2577
查看次数

为什么FPS与原始相机应用程序不同

我测试了原装相机应用程序(视频模式)附带三星Galaxy Tab 8.9.保存的前置摄像头视频能够达到24 fps,640x480.(通过在转移到Windows机器后查看视频文件的属性)

但是,当我编写前端Camera代码进行测试时.

mCamera2.setPreviewCallbackWithBuffer(new PreviewCallback() {
    public void onPreviewFrame(byte[] data, Camera camera) {
        // image processing code placed here.
    }
});
Run Code Online (Sandbox Code Playgroud)

我可以实现的最大结果是(没有将视频保存到磁盘.我只是测量onviewFrame触发率的回调函数)

  • 15 fps
  • 320x240,800x600

我希望性能与三星原装相机应用程序相同.我可以知道我错过了某种技巧吗?

android frame-rate

6
推荐指数
1
解决办法
7752
查看次数

如何获得给定字符串下降的高度?

如何获得给定字符串下降的高度?

在此输入图像描述

例如,

  • abc 应该返回0.
  • abcl 应该返回0.
  • abcp 应该返回从descnder线到基线的距离.
  • abclp 应该返回从descnder线到基线的距离.

到目前为止我能做到的最好的是

private int getDecender(String string, Paint paint) {
    // Append "l", to ensure there is Ascender
    string = string + "l";
    final String stringWithoutDecender = "l";

    final Rect bounds = new Rect();
    final Rect boundsForStringWithoutDecender = new Rect();
    paint.getTextBounds(string, 0, string.length(), bounds);
    paint.getTextBounds(stringWithoutDecender, 0, stringWithoutDecender.length(), boundsForStringWithoutDecender);
    return bounds.height() - boundsForStringWithoutDecender.height();
}
Run Code Online (Sandbox Code Playgroud)

但是,我的代码气味是它们不够好.有没有更好更快的方法?

android

6
推荐指数
1
解决办法
723
查看次数

无法访问类型为Camera的封闭实例

我有以下代码

android.hardware.Camera.Size size = new android.hardware.Camera.Size(300, 300);
Run Code Online (Sandbox Code Playgroud)

我收到以下编译错误

No enclosing instance of type Camera is accessible
Run Code Online (Sandbox Code Playgroud)

但是,我检查文档,它是一个公共构造函数

Android相机文档

我错过了什么?

android

6
推荐指数
1
解决办法
2236
查看次数

Android等效于java.awt.Dimension

我需要一个代表宽度和高度的类.

我知道创建这样的类非常简单.但是,我不想创建自己的,而是想知道,Android是否有任何类等价的java.awt.Dimension?我能找到的最接近的是Camera.Size.但是,我在从中创建实例时遇到问题.

android

6
推荐指数
1
解决办法
2882
查看次数

具有TableLayout的底部边框,用作ListView中的行

根据开放式Android中风?,基本上有两种方法可以为TableLayout实现边框.

使用笔划

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#00ffffff"/>
    <stroke android:width="1dp" android:color="#ffffff"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,这不是我想要的东西,因为我只想要底边.因此,我尝试了另一种选择.

使用2层

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is the line -->
<item>
      <shape>
            <solid android:color="#ffffff" />
      </shape>
</item>
<!-- This is the main color -->
<item android:bottom="1dp">
     <shape>
           <solid android:color="#000000" />
     </shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是,在列表视图选择期间,TableRow不会使用ListView选择颜色突出显示,因为其背景已由"#000000"图层接管.

有没有更好的方法我只有底部边框,但它会服从ListView选择高亮颜色?

android

6
推荐指数
1
解决办法
4506
查看次数

这是一种很好的技术(使用数据持有者)来消除匿名类,以减少内存泄漏风险

匿名类很容易导致内存泄漏,尤其是在Android世界中,由于配置更改,Activity或Fragment可能会突然被破坏.这是许多例子中的一个.

http://chaosinmotion.com/blog/?p=696

http://blog.andresteingress.com/2011/10/12/anonymous-inner-classes-in-android/

https://blogs.oracle.com/olaf/entry/memory_leaks_made_easy

原因是,在Activity或中创建一个匿名类Fragment,匿名类将始终保持对Activityor 的隐式引用Fragment.因此,当Activity由于配置更改而趋于过时时,如果匿名类被外部世界暴露和保留,则无法进行垃圾回收.

那么,我想知道,是否使用数据持有技术是一种好方法,可以完全消除匿名类,以减少内存泄漏的风险?或者,我是偏执狂吗?

使用匿名类

public class HomeMenuFragment {
    private Parcelable selectedInfo = null;
    private List<View> homeMenuRows = new ArrayList<View>();

    private void fun() {
        ...
        ...
        row.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // homeMenuRows is member variable
                for (View r : homeMenuRows) {
                    r.setSelected(false);
                }
                row.setSelected(true);
                // selectedInfo is member variable
                selectedInfo = watchlistInfo;
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

使用数据持有者技术重构

public class HomeMenuFragment {
    private …
Run Code Online (Sandbox Code Playgroud)

java android

6
推荐指数
1
解决办法
1758
查看次数

是否确认我不能在颜色状态列表资源中使用主题颜色属性

是否确认我无法在颜色状态列表资源中使用主题颜色属性?

我有以下代码,它非常完美.

彩色/ home_menu_text_view_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#ffffffff" />    <!-- pressed -->
    <item android:state_focused="true" android:color="#ffffffff" />    <!-- focused -->
    <item android:state_selected="true" android:color="#ffffffff" />   <!-- selected -->
    <item android:color="#ff000000" />                                 <!-- default -->
</selector>
Run Code Online (Sandbox Code Playgroud)

布局/ home_menu_row.xml

<!-- Use duplicateParentState, so that we can receive click event from parent linear layout -->
<TextView
    android:id="@+id/name"
    android:gravity="center_vertical"
    android:padding="5dp"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="48dp"
    android:duplicateParentState="true"        
    android:textColor="@color/home_menu_text_view_selector"
    android:drawablePadding="10dp" />
Run Code Online (Sandbox Code Playgroud)

但是,如果我将代码调整为以下代码,它将不再起作用.在默认模式下,它不再更改为我想要的颜色.?android:attr/textColorPrimary假设在我的情况下是黑色(#ff000000).

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#ffffffff" /> …
Run Code Online (Sandbox Code Playgroud)

android

6
推荐指数
1
解决办法
1722
查看次数

restartLoader和onContentChanged之间的区别

目前,我有一个装载机

@Override
public Loader<List<HomeMenuRowInfo>> onCreateLoader(int arg0, Bundle bundle) {
    return new HomeMenuRowInfosLoader(this.getSherlockActivity());
}
Run Code Online (Sandbox Code Playgroud)

有时,由于内容更改,我需要让加载程序重新加载.我会做的.

this.getLoaderManager().getLoader(0).onContentChanged();
Run Code Online (Sandbox Code Playgroud)

但是,我希望onCreateLoader在内容更改时将一些其他捆绑信息传递给回调.我意识到通过使用onContentChanged,没有办法这样做.

我能搞清楚的唯一方法是

this.getLoaderManager().restartLoader(0, bundle, this);
Run Code Online (Sandbox Code Playgroud)

我想知道,是否有任何重大分歧Loader的行为,使用的restartLoader不是onContentChanged,除了捆绑传递的能力吗?

android android-loadermanager android-loader

6
推荐指数
1
解决办法
2085
查看次数