2012-07-09 73 views
4

我试图重新创建在冰淇淋三明治中看到的切换幻灯片,但在ICS下面的Android版本中不可用。我处于适合滑块的位置,但我目前使用两个平行四边形图像(一个用于关闭状态,一个用于打开状态)。我想理想地在运行时创建drawable,并根据状态简单地改变它的颜色。这将最终帮助定制。以编程方式在Android中创建平行四边形绘图

我对drawables一般都很陌生,并且希望以编程方式创建这个,因为在我们的框架中我们不使用xml。

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

任何帮助将不胜感激,请让我知道,如果你需要任何更多的信息!

这是机器人拨动的样子,我想以后他们给我的模式: ICS Toggle

如果您需要任何其他详细信息,请让我知道,我希望我解释我是什么之后以有意义的方式。

谢谢!

+0

在这种情况下,我总是看看Android源代码,看看那里发生了什么。为什么不只是采取相关的ICS来源并将其应用到您自己的项目中? – 2012-07-09 15:12:15

+0

他们在真正的实现中使用原始图像,他们没有使用的来源。 – HandlerExploit 2012-07-09 15:20:40

+0

他们真的不是梯形吗?还是有平行四边形滑动并隐藏了角落? – snapfractalpop 2012-10-19 20:42:18

回答

5

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

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(); 
}