【问题标题】:Programmatically create Parallelogram Drawable in Android在 Android 中以编程方式创建平行四边形 Drawable
【发布时间】:2012-07-09 15:01:17
【问题描述】:

我正在尝试重新创建在 Ice Cream Sandwich 中看到的切换幻灯片,但不适用于 ICS 以下的 Android 版本。我对我的滑块感到满意,但是我目前正在使用两个平行四边形图像(一个用于关闭状态,一个用于打开状态)。我想理想地在运行时创建可绘制对象,并根据状态简单地更改它的颜色。这对最终的定制很有帮助。

总的来说,我对可绘制对象很陌生,并且想以编程方式创建这个,因为在我们的框架中我们不使用 xml。

创建这个的原因是平行四边形是一个整体,使缩放更易于管理和定制。

任何帮助将不胜感激,如果您需要更多信息,请告诉我!

这是 androids toggle 的样子,我想模仿他们的:

如果您需要任何其他详细信息,请告诉我,我希望我能以有意义的方式解释我所追求的。

谢谢!

【问题讨论】:

  • 在这种情况下,我总是查看 Android 源代码,看看那里发生了什么。为什么不直接将相关的 ICS 源代码应用到您自己的项目中?
  • 他们在实际实现中使用原始图像,他们没有使用来源。
  • 它们真的不是梯形吗?或者是否有一个平行四边形可以滑动并隐藏它的角?
  • 嘿,Cameron,看起来不错的解决方案,您应该将您的解决方案作为这个问题的答案。

标签: android toggle drawable


【解决方案1】:

所以我能够自己回答这个问题...我使用路径来创建可绘制对象,然后将它们缝合在一起以创建平行四边形。

public Drawable createThumbDrawable(boolean checked){
    Path path = new Path();
    path.moveTo(0, 0);
    path.lineTo(1, 0);
    path.lineTo(1, 1);
    path.lineTo(0, 1);
    path.close();

    PathShape shape = new PathShape(path, 1, 1);
    ShapeDrawable drawable = new ShapeDrawable(shape);
    if (checked){
        drawable.getPaint().setColor(Color.CYAN);
    }
    else
    {
        drawable.getPaint().setColor(Color.BLACK);
    }
    mThumbLeftDrawable = createLeftThumbDrawable(checked);
    mThumbRightDrawable = createRightThumbDrawable(checked);
    return drawable;
}

public Drawable createLeftThumbDrawable(boolean checked){
    Path path = new Path();
    path.moveTo(0, 25);
    path.lineTo(25, 0);
    path.lineTo(25, 25);
    path.close();

    PathShape shape = new PathShape(path, 25, 25);
    ShapeDrawable drawable = new ShapeDrawable(shape);
    if (checked){
        drawable.getPaint().setColor(Color.CYAN);
    }
    else
    {
        drawable.getPaint().setColor(Color.BLACK);
    }
    return drawable;
}

public Drawable createRightThumbDrawable(boolean checked){
    Path path = new Path();
    path.moveTo(0,0);
    path.lineTo(25, 0);
    path.lineTo(0, 25);
    path.close();

    PathShape shape = new PathShape(path, 25, 25);
    ShapeDrawable drawable = new ShapeDrawable(shape);
    if (checked){
        drawable.getPaint().setColor(Color.CYAN);
    }
    else
    {
        drawable.getPaint().setColor(Color.BLACK);
    }
    return drawable;

}

public void setChecked(boolean checked) {
    //Log.d(TAG, "setChecked("+checked+")");
    boolean lc = checked;
    if (!mTextOnThumb) {
        lc = !checked;
    }

    if (checked){
        mThumbDrawable = createThumbDrawable(checked);//this.getContext().getResources().getDrawable(R.drawable.slide_off);
    }
    else {
        mThumbDrawable = createThumbDrawable(checked);//this.getContext().getResources().getDrawable(R.drawable.slide); 
    }

    super.setChecked(checked);
    mThumbPosition = lc ? getThumbScrollRange() : 0;
    invalidate();
}

【讨论】:

    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多