如何从TextView获取绘图

时间:2018-11-28 17:20:08

标签: android

我正在尝试从textview获取可绘制的ID。但是我无法从textview获取可绘制的ID。因此,我获得了drawable并转换为位图以检查drawable。它适用于png图标。但是我尝试使用VectorDrawable的id我无法检查它。我附上了代码。

private void checkDrawable(int resourceId){
        Drawable[] drawables = textView.getCompoundDrawables();
        Bitmap bitmap = ((BitmapDrawable)drawables[0] ).getBitmap();
        Bitmap bitmap2 = ((BitmapDrawable)textView.getContext().getResources().getDrawable(resourceId)).getBitmap();
        return bitmap == bitmap2;
    }

此代码运行正常。但是,如果我更改为VectorDrawable,则无法检查。

private void checkDrawable(int resourceId){
        Drawable[] drawables = textView.getCompoundDrawables();
        VectorDrawable bitmap = ((VectorDrawable)drawables[0]);
        VectorDrawable bitmap2 = ((VectorDrawable)textView.getContext().getResources().getDrawable(resourceId));
        return bitmap == bitmap2;
    }

它返回不同的值。请让我有任何想法在textView中检查VectorDrawable图像。

1 个答案:

答案 0 :(得分:0)

  

我正在尝试从textview获取可绘制的ID。

我将直接解决这个问题。

您可以创建自己的TextView子类,该子类将在通货膨胀期间解析其AttributeSet并为您保留此信息。这样您以后可以随时查询它。

public class MyTextView extends AppCompatTextView {

    private int drawableLeftId;
    private String drawableLeftEntry;

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);

        for (int i = 0; i < attrs.getAttributeCount(); i++) {
            if (attrs.getAttributeName(i).equals("drawableLeft")) {
                String attributeValue = attrs.getAttributeValue(i).substring(1);
                this.drawableLeftId = Integer.parseInt(attributeValue);
                this.drawableLeftEntry = getResources().getResourceEntryName(drawableLeftId);
            }
        }
    }

    public int getDrawableLeftId() {
        return drawableLeftId;
    }

    public String getDrawableLeftEntry() {
        return drawableLeftEntry;
    }
}

现在您可以在布局中使用它:

<com.example.stackoverflow.MyTextView
    android:id="@+id/text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:drawableLeft="@drawable/my_drawable"/>

然后您可以获取ID和名称:

MyTextView text = findViewById(R.id.text);
int drawableLefId = text.getDrawableLeftId(); // 2131165284 (the actual value of R.drawable.my_drawable)
String drawableLeftEntry = text.getDrawableLeftEntry(); // "my_drawable"