2016-01-04 5 views
0

Эй я хочу сделать баннер или лента похожа на данную фотографию с TextView или любым макетом в андроид с использованием XML или Java. Я не могу понять, как это сделать.
Так что, пожалуйста, помогите мне в этом действительно необходимо.
Custom Banner that i want to makeКак сделать баннер или ленту с TextView или любого макетом

+1

Это текстовое изображение с фоном. Подходит ... –

ответ

1

Чтобы создать баннер, как, что вы должны сделать эти вещи

  1. создать форму Drawable перевернутой прямоугольного треугольника щипая this code
  2. Установить фон из TextView в этой форме
  3. Изменение TextView силы тяжести к правым/конце совместилась
0

Вот простой ИМА geview с текстовым баннером в углу, который я написал для собственного использования. Та же структура может быть применена к любому виду.

public class BannerImageView extends ImageView { 

    private Paint mRibbonPaint; 
    private Paint mTextPaint; 
    private Paint mBoxPaint; 
    private float mScale; 
    private String mBannerText; 

    public BannerImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initPainters(attrs); 
    } 

    public BannerImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initPainters(attrs); 
    } 

    private void initPainters(AttributeSet attrs) { 
     TypedArray attributes = getContext().getTheme().obtainStyledAttributes(attrs, R.styleable.BannerImageView, defStyleAttr, 0); 
     mBannerText = attributes.getString(R.styleable.BannerImageView_label); 
     mBoxPaint = new Paint(); 
     int white = ContextCompat.getColor(getContext(), R.color.white); 
     mBoxPaint.setColor(white); 
     mBoxPaint.setAlpha(156); 
     mRibbonPaint = new Paint(); 
     mRibbonPaint.setColor(ContextCompat.getColor(getContext(), R.color.banner_color)); 
     mRibbonPaint.setAntiAlias(true); 
     mRibbonPaint.setStyle(Paint.Style.STROKE); 
     mRibbonPaint.setStrokeCap(Paint.Cap.BUTT); 
     mScale = getResources().getDisplayMetrics().density; 
     mRibbonPaint.setStrokeWidth(dp(16)); 
     mTextPaint = new Paint(); 
     mTextPaint.setColor(white); 
     mTextPaint.setTextSize(dp(12)); 
    } 

    /** 
    * Converts dp to px 
    * @param dp 
    * @return 
    */ 
    private float dp(float dp) { 
     return dp * mScale + 0.5f; 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     if (!TextUtils.isEmpty(mBannerText)) { 
      canvas.drawRect(0, 0, getRight(), getBottom(), mBoxPaint); 
      canvas.drawLine(-dp(16), dp(64), dp(64), -dp(16), mRibbonPaint); 
      canvas.save(); 
      canvas.rotate(-45, 0, 0); 
      canvas.drawText(mBannerText, -dp(24), dp(38), mTextPaint); 
      canvas.restore(); 
     } 
    } 

Затем объявить дополнительные атрибуты, которые вы хотите использовать в значениях/attrs.xml

<declare-styleable name="BannerImageView"> 
    <attr name="label" format="string"/> 
</declare-styleable> 

Конечно вы используете в своих макетах XML, как обычно, но помните, что пространство имен приложения для пользовательских атрибутов

<com.my.package.BannerImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:label="Sold Out" /> 
+0

Что такое defStyleAttr ??? –

+0

Это должен быть идентификатор нужного вам атрибута (стиль). На самом деле это не важно для этого ответа - см. Здесь https://stackoverflow.com/questions/6784854/what-does-defstyleattr-and-defstyleres-in-context -obtainstyledattributes-used –

+0

после установки на ноль и его неработоспособности –