Nano Hash - криптовалюты, майнинг, программирование

android.graphics.drawable.ColorDrawable нельзя преобразовать в android.support.v7.widget.RoundRectDrawableWithShadow

Я попытался использовать CardView в своем приложении, которое довольно хорошо работало в моем макете xml. Поскольку я хочу генерировать их в своем коде, а не через xml, я попытался установить радиус с помощью метода CardView.setRadius(), как это было предложено разработчиками Android (https://developer.android.com/preview/material/ui-widgets.html#cardview).

Это вообще не работает! Я надеюсь, что кто-то может помочь мне с моей проблемой или найти хороший обходной путь с макетами xml.

Это мой код:

int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, getResources().getDisplayMetrics());
        float radius = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources().getDisplayMetrics());

        for (String color : colors) {
            CardView card = new CardView(getActivity());
            TextView text = new TextView(getActivity());
            card.setBackgroundColor(Color.parseColor("#"+color));
            card.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, height));
            card.setRadius(radius); //Error!!
            text.setText(args.get(colors.indexOf(color)) + " - #" + color);
            card.addView(text);
            group.addView(card);
        }

Это мой журнал:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.brobox.materialcolorpalette/com.brobox.materialcolorpalette.MainActivity}: java.lang.ClassCastException: android.graphics.drawable.ColorDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2212)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.ClassCastException: android.graphics.drawable.ColorDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow
            at android.support.v7.widget.CardViewEclairMr1.setRadius(CardViewEclairMr1.java:76)
            at android.support.v7.widget.CardView.setRadius(CardView.java:89)
            at com.brobox.materialcolorpalette.ColorFragment.onCreateView(ColorFragment.java:61)
            at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
            at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
            at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
            at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
            at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:571)
            at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1171)
            at android.app.Activity.performStart(Activity.java:5241)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2178)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)

ОБНОВЛЕНИЕ: теперь я использую новый Lollipop SDK с Appcompat версии 21. Теперь он вообще не работает, даже когда я пробую его без setRadius().

Новый журнал:

java.lang.ClassCastException: android.graphics.drawable.ColorDrawable cannot be cast to android.support.v7.widget.RoundRectDrawableWithShadow
            at android.support.v7.widget.CardViewEclairMr1.getShadowBackground(CardViewEclairMr1.java:148)
            at android.support.v7.widget.CardViewEclairMr1.getMinWidth(CardViewEclairMr1.java:139)
            at android.support.v7.widget.CardView.onMeasure(CardView.java:181)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:16521)
            at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1226)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.widget.ScrollView.onMeasure(ScrollView.java:326)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:16521)
            at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:848)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:453)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
            at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
            at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
            at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
            at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2552)
            at android.view.View.measure(View.java:16521)
            at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1915)
            at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5603)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
            at android.view.Choreographer.doCallbacks(Choreographer.java:574)
            at android.view.Choreographer.doFrame(Choreographer.java:544)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612)
            at dalvik.system.NativeStart.main(Native Method)

Обновление 2. Думаю, это ошибка Google. Поэтому я указал им на это: https://code.google.com/p/android/issues/detail?id=77843


  • Проверьте [это] [1] [1]: stackoverflow.com/a/18055679/3322203 надеюсь, это поможет вам . 16.10.2014
  • Вы это исправили? я только что обновил, вылетает 24.10.2014
  • У меня есть еще эта проблема. Я предполагаю, что это ошибка, связанная с Google, и поэтому я открыл ее: code.google. .com/p/android/issues/detail?id=77843 24.10.2014
  • Спасибо, я просто отметил это и добавил комментарий. Я потратил на это 2 часа :( 24.10.2014

Ответы:


1

Я получаю эту ошибку при вызове метода setBackgroundColor(), который определен в классе View.

cardView.setBackgroundColor(Color.parseColor("#ffffcc"));

Вместо этого следует вызвать метод setCardBackgroundColor(), специфичный для CardView и определенный в классе CardView.

Этот код, устанавливающий как цвет фона, так и радиус угла, работает для меня:

cardView.setCardBackgroundColor(Color.parseColor("#ffffcc"));
cardView.setRadius(50);
29.01.2015
  • Я понял это сам, но забыл о своем собственном вопросе. Поэтому я отмечаю ваш ответ как правильный, потому что он решает проблему;) Спасибо за внимание! 29.01.2015
  • этот тоже решил мою проблему. я использовал список материалов, который зависит от android.support.v7.widget.CardView. приложение аварийно завершает работу на cardView.setBackgroundColor(card.getBackgroundColor()); я использовал setCardBackgroundColor, который решил проблему сбоя 19.05.2015
  • ПРОБЛЕМА. Приведенное выше решение устранило исключение, но когда я использую cardView.setCardBackgroundColor(Color.TRANSPARENT), он рисовал серый прямоугольник вокруг элемента, тогда как setBackgroundColor(Color.TRANSPARENT) этого не делал. Я не хочу, чтобы этот recatangle. Я хочу, чтобы он оставался ПРОЗРАЧНЫМ. Если кому-то непонятно, почему я рисую прозрачный фон, это чтобы очистить предыдущий выбранный элемент. 13.05.2016

  • 2

    Я знаю, что это старый вопрос, но если вы хотите изменить bgcolor CardView сейчас в android.support.v7.widget.CardView, вы можете просто использовать setCardBackgroundColor:

     cardView.setCardBackgroundColor(Color.parseColor("#dddddd"));
    

    или просто

     cv.setCardBackgroundColor(Color.LTGRAY);
    
    14.05.2015

    3

    Я обнаружил, что вы не можете установить фон представления карты. Даже в XML. Итак, это мой обходной путь:

    Поместите все в дочерний макет карты:

    <android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:elevation="10dp">
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/holder_relative_layout"
        android:orientation="horizontal"
        android:gravity="center_vertical">
    ...
    

    Затем в коде:

    cardView.row.findViewById(R.id.holder_relative_layout).setBackgroundColor(getResources().getColor(R.color.MediumSeaGreen));
    
    14.12.2014

    4

    Комментарий об использовании SetCardBAckgroundColor с CardViews верен, но мне также пришлось преобразовать Views в View, чтобы его скомпилировать.

    ((CardView)holder.itemView).setCardBackgroundColor(Color.parseColor("#FFFFCC"));
    

    Все работает сейчас.

    16.10.2015

    5

    Я столкнулся с такой же аварией. Проблема в том, что вы программно устанавливаете цвет фона в CardView в своем коде.

    card.setBackgroundColor(Color.parseColor("#"+color));
    

    прокомментируйте строку. и установите фон и другое свойство в самом xml. Не делайте это программно.

    Это сработало для меня. :)

    Лучше определить другой XML-файл для разных ситуаций/данных, которые вы хотите различать.

    14.11.2014

    6

    Это простая проблема библиотеки поддержки, если вы сначала установите фон, а затем цвет. Они (Google) вызывают getDrawable() для установки цвета фона, если вы вызываете изменение цвета. Они преобразуют Drawable в RoundRectdrawable, и у вас, возможно, есть другой вид Drawable. Например, девять патчей Drawable. Просто переопределите setBackgroundColor() на setBackgroundDrawable(new RoundedDrawable(...)) Не уверен насчет конструктора и имени класса, просто посмотрите исходный код карты.

    Это проблема:

    @Override
    public void setBackgroundColor(CardViewDelegate cardView, int color) {
       ((RoundRectDrawable) (cardView.getBackground())).setColor(color);
    }
    

    изменить на:

    @Override
    public void setBackgroundColor(int color) {
        setBackgroundDrawable(new RoundRectDrawable(color, getRadius()));
    }
    
    31.05.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..