增量不透明度,需要恒定的不透明度图像视图与Drawable

时间:2015-12-25 16:05:25

标签: java android paint android-drawable alpha

我正在以编程方式创建每个视图之间带有水平线的文本视图。使用以编程方式创建的drawable。

问题是,不透明度从光线开始,逐渐增加每条线。

我已经记录了所提供的两种方法中所有点的可绘制,绘画,图像视图和线性布局的不透明度(getAlpha()),并且从drawable中它总是255和视图1.0。我不明白为什么它的行为不像是真的。我也试过设置Alpha,它没有任何区别。

为什么要这样做以及如何解决?

的xml:

<LinearLayout android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" .../>

    <Button android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="PaintDashedLines"
        android:text="Press Me"/>
</LinearLayout>

的java:

static int tvCount = 0;

public void PaintDashedLines(View v) {
    LinearLayout ll = (LinearLayout) findViewById(R.id.main);
    TextView tv = new TextView(MainActivity.this);
    tv.setGravity(Gravity.CENTER);
    tv.setTextSize(25);
    tv.setPadding(0, 5, 0, 5);
    ll.addView(tv);
    tv.setText("TextView " + tvCount);
    ImageView divider = new ImageView(MainActivity.this);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            ll.getWidth(), 2);
    lp.setMargins(0, 5, 0, 5);
    divider.setLayoutParams(lp);
    divider.setBackground(CreateDashedLined());
    ll.addView(divider);
    tvCount++;
}

public static Drawable CreateDashedLined() {
    ShapeDrawable sd = new ShapeDrawable(new RectShape());
    Paint fgPaintSel = sd.getPaint();
    fgPaintSel.setColor(Color.BLACK);
    fgPaintSel.setStyle(Paint.Style.STROKE);
    fgPaintSel.setPathEffect(new DashPathEffect(new float[]{5, 10}, 0));
    return sd;
}

enter image description here

1 个答案:

答案 0 :(得分:11)

对我来说,模拟器看起来更像一些问题。您也可以尝试使用

禁用硬件加速
use Juakali\Session;

require_once __DIR__ . '/../vendor/autoload.php';

Session::put('test', 'test');

请记住,您每次都不需要实例化新的 ll.setLayerType(View.LAYER_TYPE_SOFTWARE, null); ,只是为了在ImageView之间绘制一个分隔线。你可以使用setDivider。 E.g。

TextView

onCreate

按下按钮

ShapeDrawable sd = new ShapeDrawable(new RectShape());
sd.setIntrinsicHeight(1);
Paint fgPaintSel = sd.getPaint();
fgPaintSel.setARGB(255, 0, 0, 0);
fgPaintSel.setStyle(Paint.Style.STROKE);
fgPaintSel.setPathEffect(new DashPathEffect(new float[]{5, 10}, 0));

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main);
linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE | LinearLayout.SHOW_DIVIDER_END);
linearLayout.setDividerDrawable(sd);

结果是

enter image description here