2016-10-21 2 views
1

привета пытается создать этот макет, я надеюсь использовать представление с ним ЦСИ указывая на drawaable с формой и наконечникомандроид вытяжки, как создать этот

title here title here](https://res.cloudinary.com/hashnode/image/upload/v1477050769/ismtsuj44lbvsksjztjh.png)[![enter image description here] 1 места, которое в recyclerview ONTOP из вид изображения

<RelativeLayout 
     .... 
      > 
    <View 
     align_parentTop= true 
     src= " drawable with an invert tip inside " 
     .... 
      /> 
    <ImageView //actual image here 
     ... /> 

, но я могу создать форму я, а также для преобразования его в XML, поэтому он поддерживает все размеры

+0

Вы должны нарисовать фигуру с помощью примитивов в Java. Таким образом, он поддерживается на 100% повсюду. Вам вообще не нужен XML. – durbnpoisn

+0

Использовать файл PNP размером 9pp – theBugger

+0

@durbnpoisn, как это сделать, вы можете предложить любые ресурсы – user46772

ответ

0

Вы можете создать поверните изображение с помощью атрибута android:scaleY="-1" и нарисуйте Совет по Canvas на drawPath, как показано ниже. Только изменение scaleType для изображений и углов треугольника по мере необходимости.

layout.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/imgInvertTip" 
     android:layout_width="match_parent" 
     android:layout_height="90dp" 
     android:scaleType="centerCrop" 
     android:scaleY="-1"/> 

    <ImageView 
     android:id="@+id/imgPhoto" 
     android:layout_width="match_parent" 
     android:layout_height="400dp" 
     android:layout_alignParentStart="true" 
     android:layout_below="@+id/imgInvertTip" 
     android:scaleType="fitXY"/> 
</RelativeLayout> 

MainActivity.java

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     final ImageView imgInvertedTip = (ImageView) findViewById(R.id.imgInvertTip); 
     ImageView imgPhoto = (ImageView) findViewById(R.id.imgPhoto); 

     Drawable photo = AppCompatResources.getDrawable(getApplicationContext(), R.drawable.photo); 
     imgInvertedTip.setBackground(photo); 
     imgPhoto.setImageDrawable(photo); 

     ViewTreeObserver vto = imgInvertedTip.getViewTreeObserver(); 
     vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      public boolean onPreDraw() { 
       imgInvertedTip.getViewTreeObserver().removeOnPreDrawListener(this); 

       int width = imgInvertedTip.getMeasuredWidth(); 
       int height = imgInvertedTip.getMeasuredHeight(); 
       Bitmap tip = createTip(width, height); 

       imgInvertedTip.setImageBitmap(tip); 
       return true; 
      } 
     }); 
    } 

    private Bitmap createTip(int width, int height) { 
     Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     paint.setColor(android.graphics.Color.WHITE); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setAntiAlias(true); 

     int tipStep = height/2; 

     Point a = new Point(tipStep, 0); 
     Point b = new Point(tipStep * 2, 90); 
     Point c = new Point(tipStep * 3, 0); 

     Path path = new Path(); 
     path.setFillType(Path.FillType.INVERSE_EVEN_ODD); 
     path.lineTo(a.x, a.y); 
     path.lineTo(b.x, b.y); 
     path.lineTo(c.x, c.y); 
     path.close(); 

     Bitmap tip = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(tip); 
     canvas.drawPath(path, paint); 

     return tip; 
    } 
+0

это должно произойти в переработчике, это много вычислений не так уж и хорошо, не думайте, я понимаю, что самый простой способ - использовать другое изображение перед фактическим изображением, проблема я могу использовать вектор, поэтому масштабирование проблемы с телефоном разных размер экрана – user46772

+0

есть способ расширить ваш код выше, не передавая фактическое фото (т.е. не на самом деле, возможно, ресурс) 'imgInvertedTip.setBackground (фото);' как я использую glide для рендеринга изображения с url, спасибо за ваш respsone – user46772

+0

Хорошо. Пожалуйста, обновите свой вопрос (об использовании вектора), он будет идеальным –

Смежные вопросы