在没有findViewById()的情况下以编程方式更改可绘制xml文件的颜色

丹麦人安萨里

在此处输入图片说明

所以我想做的是..

  1. 获取可绘制形状(xml文件)
  2. 获取可绘制的颜色
  3. 使用colors.xml中可用的颜色更改其颜色
  4. 将可绘制对象设置为CardView上的某些ImageView(不是问题)

以下是代码:-

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="md_red_900">#B71C1C</color>
    <color name="md_pink_900">#880E4F</color>
    <color name="md_purple_900">#4A148C</color>
    <color name="md_deep_purple_900">#311B92</color>
    ...
    <!--15 more colors-->
</resources>

shape_template.xml(可绘制形状):-

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <solid android:color="@color/md_white_1000" />
        </shape>
    </item>
</selector>

MainColorPaletteAdapter.java(我要更改可绘制颜色):-

package com.danish.foveros.adapter;

import android.graphics.drawable.Drawable;
import android.media.Image;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.danish.foveros.R;  
import java.util.ArrayList;
import java.util.List;

public class MainColorPaletteAdapter extends RecyclerView.Adapter<MainColorPaletteAdapter.ViewHolder> {
    List<MainColorPaletteGetSet> mItems;
    String[] colorName;
    int[] colorThumbnail;
    int[] allMaterialColor900;
    int[] colorNameBackgroundColor;

    public MainColorPaletteAdapter() {
        super();
        mItems = new ArrayList<MainColorPaletteGetSet>();
        MainColorPaletteGetSet color;

        colorName = new String[]{"Amber", "Brown", "Cyan", "Teal"};
        colorThumbnail = new int[]{R.drawable.amber, R.drawable.brown,
                R.drawable.cyan, R.drawable.teal};
        colorNameBackgroundColor = new int[]{R.color.md_amber_900, R.color.md_brown_900,
                R.color.md_cyan_900, R.color.md_teal_900};

        for (int i = 0; i < colorName.length; i++) {
            color = new MainColorPaletteGetSet();
            color.setColorName(colorName[i]);
            color.setColorThumbnail(colorThumbnail[i]);
            color.setColorNameBackgroundColor(colorNameBackgroundColor[i]);
            mItems.add(color);
        }    
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View v = LayoutInflater
                .from(viewGroup.getContext())
                .inflate(R.layout.fragment_home_data, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        MainColorPaletteGetSet color = mItems.get(position);
        holder.colorThumbnail.setImageResource(color.getColorThumbnail());
        holder.colorName.setText(color.getColorName());
        holder.colorName.setBackgroundColor(color.getColorNameBackgroundColor());

    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView colorThumbnail;
        public TextView colorName;

        public ViewHolder(View itemView) {
            super(itemView);
            colorThumbnail = (ImageView) itemView.findViewById(R.id.colorThumbnail);
            colorName = (TextView) itemView.findViewById(R.id.colorName);

        }
    }
}

我尝试了很多方法,但他们说要通过findViewById()获取View的可绘制或背景颜色,但它对我不起作用。

如您所见,可绘制形状是一个非常简单的形状,因此这样做可能并不困难。

我以为创建19个可绘制的xml文件,我可以得到一个可绘制的更改,它的颜色用于第一个cardview,更改它的颜色,并将其用于第二个cardview,依此类推。

询问是否需要更多信息。

任何帮助表示赞赏。谢谢你。

丹麦人安萨里

我自己解决了:-

package com.danish.foveros.adapter;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.Image;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.danish.foveros.R;

import java.util.ArrayList;
import java.util.List;

public class MainColorPaletteAdapter extends RecyclerView.Adapter<MainColorPaletteAdapter.ViewHolder> {
    List<MainColorPaletteGetSet> mItems;
    String[] colorName;
    int[] colorThumbnail;
    int[] allMaterialColor900;
    int[] colorNameBackgroundColor;

    public MainColorPaletteAdapter() {
        super();
        mItems = new ArrayList<MainColorPaletteGetSet>();
        MainColorPaletteGetSet color;
        colorNameBackgroundColor = new int[]{
                R.color.md_red_900,
                R.color.md_pink_900,
                R.color.md_purple_900,
                R.color.md_deep_purple_900,
                R.color.md_indigo_900,
                R.color.md_blue_900,
                R.color.md_light_blue_900,
                R.color.md_cyan_900,
                R.color.md_teal_900,
                R.color.md_green_900,
                R.color.md_light_green_900,
                R.color.md_lime_900,
                R.color.md_yellow_900,
                R.color.md_amber_900,
                R.color.md_orange_900,
                R.color.md_deep_orange_900,
                R.color.md_brown_900,
                R.color.md_grey_900,
                R.color.md_blue_grey_900
        };

        colorName = new String[]{
                "Red",
                "Pink",
                "Purple",
                "Deep Purple",
                "Indigo",
                "Blue",
                "Light Blue",
                "Cyan",
                "Teal",
                "Green",
                "Light Green",
                "Lime",
                "Yellow",
                "Amber",
                "Orange",
                "Deep Orange",
                "Brown",
                "Grey",
                "Blue Grey"
        };
        colorThumbnail = new int[]{
                R.color.md_red_500,
                R.color.md_pink_500,
                R.color.md_purple_500,
                R.color.md_deep_purple_500,
                R.color.md_indigo_500,
                R.color.md_blue_500,
                R.color.md_light_blue_500,
                R.color.md_cyan_500,
                R.color.md_teal_500,
                R.color.md_green_500,
                R.color.md_light_green_500,
                R.color.md_lime_500,
                R.color.md_yellow_500,
                R.color.md_amber_500,
                R.color.md_orange_500,
                R.color.md_deep_orange_500,
                R.color.md_brown_500,
                R.color.md_grey_500,
                R.color.md_blue_grey_500
        };


        for (int i = 0; i < colorName.length; i++) {
            color = new MainColorPaletteGetSet();
            color.setColorName(colorName[i]);
            color.setColorThumbnail(colorThumbnail[i]);
            color.setColorNameBackgroundColor(colorNameBackgroundColor[i]);
            mItems.add(color);
        }


    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View v = LayoutInflater
                .from(viewGroup.getContext())
                .inflate(R.layout.fragment_home_data, viewGroup, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        MainColorPaletteGetSet color = mItems.get(position);
        holder.colorThumbnailView.setBackgroundResource(color.getColorThumbnail());
        holder.colorNameView.setText(color.getColorName());
        holder.colorNameView.setBackgroundResource(color.getColorNameBackgroundColor());
    }

    @Override
    public int getItemCount() {
        return mItems.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView colorThumbnailView;
        public TextView colorNameView;



        public ViewHolder(final View itemView) {
            super(itemView);
            colorThumbnailView = (ImageView) itemView.findViewById(R.id.colorThumbnail);
            colorNameView = (TextView) itemView.findViewById(R.id.colorName);
        }

    }
}

最终输出:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在没有System.Configuration的情况下以编程方式反序列化xml文件

如何在没有 SetLeft 的情况下以编程方式更改图像位置?

以编程方式更改可绘制颜色

在没有 XML 的情况下以编程方式运行 testng 抛出 NoSuchMethodError XmlPackage

在没有动画的情况下以编程方式在 ScrollView 滚动

在没有xml的情况下更改edittext光标颜色和大小?

在没有导航控制器Swift的情况下以编程方式更改视图控制器

如何在不使用CSS的情况下以编程方式更改JavaFX中的TreeView颜色?

在没有情节提要的情况下以编程方式加载UITableViewController

如何在没有用户交互的情况下以编程方式构建VI?

在没有反应路由器的情况下以编程方式重定向到 URL

如何在没有jQuery的情况下以编程方式触发“输入”事件?

如何在没有UINavigationController的情况下以编程方式返回到先前的视图?

在没有情节提要的情况下以编程方式将其缝制到UINavigation Controller

是否可以在没有用户干预(即以编程方式)的情况下启用iCloud?

在没有IBOutlets的情况下以编程方式更新布局约束-Swift

如何在没有动画的情况下以编程方式进行“显示(例如,推送)”搜索?

如何在没有sudo的情况下使用notify-send以编程方式发送通知?

如何在没有变量的情况下以编程方式使用dplyr cross()?

在没有安装Excel的情况下以编程方式填充Excel模板

有没有办法在不关闭 Windows 10 中的文件资源管理器的情况下以编程方式关闭控制面板?

在没有窗口的情况下更改状态栏颜色

如何在没有导航页面的情况下更改状态栏颜色

如何在没有代码的情况下更改切换按钮颜色

如何在没有js的情况下使用html和CSS更改标签颜色?

在没有!important的情况下更改mat-button-focus-overlay的背景颜色

如何在没有_rowVariant的情况下动态更改表行的颜色?

没有绘图功能的情况下如何更改Google图表背景颜色

如何在没有事件的情况下更改Devexpress网格行的颜色