2017-02-14 15 views
0

Что я хочу достичь, так это сделать градиент, чтобы эффект градиента начинался в нижней части изображения, скажем, после 80% высоты представления. Итак, я хочу, чтобы большая часть вида (80%) была покрыта startColor.Эффект начального градиента после 80% высоты сакса

Я пробовал:

<gradient 
    android:type="linear" 
    android:angle="90" 
    android:startColor="#70C272" 
    android:endColor="#F19941" 
    android:centerX="80%" 
    android:centerY="100%" 
    /> 

Но это не похоже на работу.

EDIT:

Edit:

Использование ShapeDrawable:

 ShapeDrawable.ShaderFactory sf=new ShapeDrawable.ShaderFactory() { 
      @Override 
      public Shader resize(int width, int height) { 
       final float DY = 60; 
       final float heightFraction = height * 0.8f; 
       return new LinearGradient(0,heightFraction-DY,0,heightFraction+DY, 
        //  new int[] {Color.parseColor("#E44342"), Color.parseColor("#F19941")}, 
         new int[] {Color.BLUE, Color.GREEN}, 
         new float[]{0.5f, 1}, 
         Shader.TileMode.REPEAT); 
      } 
     }; 
     ShapeDrawable sd = new ShapeDrawable(new RectShape()); 
     sd.setShaderFactory(sf); 
+0

Вы можете использовать 2 вида и их фон в LinearLayout - 1-й вид может занимать 80% веса и иметь сплошной цветной фон, 2-й - 20% вес и градиентный фон. –

+0

@Manos, к какому взгляду вы его применяете? –

+0

@Charu ක Это довольно сложно. Я пытаюсь применить его к LineDataSet (setFillDrawable (Drawable d); mpandroidchart. Https://github.com/PhilJay/MPAndroidChart/wiki/DataSet-classes-in-detail – Manos

ответ

1

Ну если вы хотите применить градиент к нижней 20% от вашей точки зрения, это мой подход,

  • У меня есть FrameLayout как корень XML
  • LinearLayout для градиента с фоном gradient.XML

мой XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relative" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:orientation="horizontal"> 

    // whatever your views 


    <LinearLayout 
     android:id="@+id/my_view_gradient" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@drawable/gradient_draw" 
     android:orientation="vertical"></LinearLayout> 

</FrameLayout> 

вытяжке ресурсов gradient_draw.xml (вы можете использовать свои собственные цвета)

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 
    <gradient 
     android:type="linear" 
     android:angle="90" 
     android:startColor="#70C27200" 
     android:endColor="#00000000" 
     android:centerX="80%" 
     android:centerY="100%" 
     /> 

    <corners android:radius="0dp" /> 
</shape> 

сейчас Я установил это на дно 20%

public class YourActivity extends Activity { 

    private int height,width; 
    private LinearLayout linearLayoutGradient ; 

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

     linearLayoutGradient = (LinearLayout) findViewById(R.id.my_view_gradient); 

     DisplayMetrics displaymetrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
     height = displaymetrics.heightPixels; 
     width = displaymetrics.widthPixels; 

     FrameLayout.LayoutParams frameLparams= new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, (height*20)/100); 
     frameLparams.topMargin = (height*80)/100; 
     linearLayoutGradient.setLayoutParams(frameLparams); 

    } 

} 
+0

Это не сработает, так как я могу работать только с Drawables – Manos

+0

@Manos у вас нет макета? –

+0

Макет встроен в библиотеку (mpandroidchart) – Manos

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

  • Нет связанных вопросов^_^