Программно создать Parallelogram Drawable в Android

Я пытаюсь воссоздать слайд переключения, который виден в Ice Cream Sandwich, но недоступен для версий Android ниже ICS. Я нахожусь в точке, где мне удобно с моим ползунком, однако в настоящее время я использую два изображения параллелограмма (одно для его выключенного состояния, одно для его включенного состояния). Я хотел бы идеально создать drawable во время выполнения, и просто изменить его цвет в зависимости от состояния. Это действительно поможет для настройки в конце.

Я совершенно новичок в рисовании в целом, и я хотел бы создать его программно, так как в нашей среде мы не используем XML.

Причиной создания этого является то, что параллелограмм представляет собой единый элемент, что делает масштабирование намного более управляемым и настраиваемым.

Любая помощь будет принята с благодарностью, и, пожалуйста, дайте мне знать, если вам нужна дополнительная информация!

Вот как выглядит переключение андроидов, я бы хотел смоделировать свои после их: ICS Toggle

Если вам нужны какие-либо другие детали, пожалуйста, дайте мне знать, я надеюсь, что я объяснил то, что я после, содержательно.

Спасибо!

 ryvianstyron17 мая 2013 г., 22:44
Эй, Кэмерон, выглядишь как отличное решение, ты должен дать свое решение как ответ на этот вопрос.
 Jerry Brady09 июл. 2012 г., 17:12
В подобных ситуациях я всегда смотрю на источник Android, чтобы увидеть, что там происходит. Почему бы просто не взять соответствующий источник ICS и адаптировать его в свой собственный проект?
 HandlerExploit09 июл. 2012 г., 17:20
Они используют необработанные изображения в реальной реализации, их нет источника для использования.
 snapfractalpop19 окт. 2012 г., 22:42
Разве они на самом деле не трапеции? Или есть параллелограмм, который скользит и скрывает его углы?

Ответы на вопрос(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();
}

Ваш ответ на вопрос