web-dev-qa-db-ja.com

アプリが実際のAndroidデバイスで実行されている場合、点線は実際には点線ではありません

私のアプリでは、XMLで定義された垂直の点線を使用しています。

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:fromDegrees="90"
    Android:toDegrees="90">
<shape

    Android:shape="line">
    <stroke

        Android:width="1dp"
        Android:color="@color/light_gray"
        Android:dashWidth="2dp"
        Android:dashGap="4dp"
        />
</shape>

Android Studioでレイアウトを選択していると、線は適切に点線でレンダリングされますが、実際のデバイスでアプリを実行すると問題が発生します。線は実線で表示されます。ギャップ..どこで問題が発生する可能性があるか知っていますか?最新の4.3 Androidを実行しているデバイスを含むさまざまなデバイスを試しました..どこでも同じように見えます:/

29
simekadam

これは、ハードウェアアクセラレーションに関連している可能性があります。破線はGLモードではサポートされていません。

ここに文書化されています: https://code.google.com/p/Android/issues/detail?id=29944

次のように、AndroidManifest.xmlでハードウェアアクセラレーションをオフにします。

Android:hardwareAccelerated="false"

または:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null) 

最初のソリューションの使用方法の詳細: http://developer.Android.com/guide/topics/graphics/hardware-accel.html

60
stoefln

ハードウェアアクセラレーションの制御

ハードウェアアクセラレーションは、次のレベルで制御できます。

  • 応用

  • アクティビティ

  • 見る

アプリケーションレベル

<application Android:hardwareAccelerated="true" ...>

活動レベル

<application Android:hardwareAccelerated="true">
    <activity ... />
    <activity Android:hardwareAccelerated="false" />
</application>

ウィンドウレベル

getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
    WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

ビューレベル

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

参照

21
AZ_

同じ解決策を見つけましたが、属性の表示(xml)にあります:

        <View
        Android:layout_width="wrap_content"
        Android:layout_height="4dp"
        ...
        Android:layerType="software"/>

上で述べたように、それはビューレベルだと思います。属性の他のバリアント(「なし」およびもちろん「ハードウェア」)は私には機能しませんでした。

5
Dmitry Lvov