How to split a fragment in Android into two colors

First, I would like to say, please do not put this question in a duplicate. It differs from other posts in one critical way. Does anyone know how I can split a fragment color into two colors right in the middle? Thanks to all!

+5
source share
4 answers

I achieved this by creating the perfect background in Photoshop, saving it as .png , and then setting it as the activity background when I need it. Simple, clean, light, and because I need it to be in two colors all the time, I donโ€™t have to worry about the image becoming uneven.

-1
source

here we use a sample to use the gradient

  float in[] = new float[] {0f,1f}; TextView textView= (TextView)findViewById(R.id.tv_test); Shader shader = new LinearGradient( 0, textView.getTextSize(), textView.getWidth(), textView.getHeight(), new int[]{Color.RED, Color.BLUE},in, Shader.TileMode.CLAMP); textView.getPaint().setShader(shader); 

To achieve the second simple user Framelayout xml

  <FrameLayout android:id="@+id/fl_test" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/ll_test" android:layout_width="200dp" android:layout_height="100dp" android:background="@android:color/white" android:orientation="horizontal"> <View android:layout_width="wrap_content" android:layout_height="100dp" android:layout_weight="1" android:background="@android:color/holo_red_dark" /> <View android:layout_width="wrap_content" android:layout_height="100dp" android:layout_weight="1" android:background="@android:color/holo_blue_dark" /> </LinearLayout> <TextView android:id="@+id/tv_test2" android:layout_width="200dp" android:layout_height="100dp" android:layout_gravity="center" android:background="@android:color/transparent" android:gravity="center" android:text="A" android:textColor="@android:color/white" android:textSize="100sp" /> </FrameLayout> 

For the third, you have to write a little and do some work at the pixel level

 <TextView android:id="@+id/tv_test" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="H" android:textColor="@android:color/holo_red_dark" android:textSize="100sp" /> <FrameLayout android:id="@+id/fl_test" android:layout_width="wrap_content" android:layout_height="wrap_content"> <LinearLayout android:id="@+id/ll_test" android:layout_width="200dp" android:layout_height="100dp" android:background="@android:color/white" android:orientation="horizontal"> <View android:layout_width="wrap_content" android:layout_height="100dp" android:layout_weight="1" android:background="@android:color/holo_red_dark" /> <View android:layout_width="wrap_content" android:layout_height="100dp" android:layout_weight="1" android:background="@android:color/holo_blue_dark" /> </LinearLayout> <TextView android:id="@+id/tv_test2" android:layout_width="200dp" android:layout_height="100dp" android:layout_gravity="center" android:background="@android:color/transparent" android:gravity="center" android:text="A" android:textColor="@android:color/white" android:textSize="100sp" /> </FrameLayout> <ImageView android:id="@+id/iv_test" android:layout_width="200dp" android:layout_height="200dp" /> 

 public class MainActivity extends AppCompatActivity { View linearLayout; View tvTest2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); TextView textView = (TextView) findViewById(R.id.tv_test); Shader shader = new LinearGradient( 0, textView.getTextSize()/2, textView.getTextSize(), textView.getTextSize()/2,Color.RED, Color.BLUE, Shader.TileMode.CLAMP); textView.getPaint().setShader(shader); linearLayout = findViewById(R.id.ll_test); tvTest2 = findViewById(R.id.tv_test2); } @Override protected void onResume() { super.onResume(); new Handler().postDelayed(new Runnable() { @Override public void run() { ImageView imageView = (ImageView) findViewById(R.id.iv_test); Bitmap b1 = getBitmapFromView(linearLayout); Bitmap b2 = getBitmapFromView(tvTest2); imageView.setImageBitmap(textEffect(b1, b2)); } },2000); } public Bitmap textEffect(Bitmap image, Bitmap text) { if (image.getWidth() != text.getWidth() || image.getHeight() != text.getHeight()) { throw new IllegalArgumentException("Dimensions are not the same!"); } for (int y = 0; y < image.getHeight(); ++y) { for (int x = 0; x < image.getWidth(); ++x) { int textPixel = text.getPixel(x, y); int imagePixl = image.getPixel(x,y); int red = Color.red(textPixel); int blue = Color.blue(textPixel); int green = Color.green(textPixel); int alpha = Color.alpha(textPixel); Log.i("TAG", "textEffect: "+x+"-"+y+",-->"+red+","+blue+","+green+","+alpha); /*Since text color is white so give the color of background to it * else make it white*/ if (red == 255) { if (blue == 255) { if (green == 255) { image.setPixel(x, y, imagePixl); }else { image.setPixel(x, y, textPixel); } }else{ image.setPixel(x, y, textPixel); } }else { image.setPixel(x, y, textPixel); } } } return image; } public static Bitmap getBitmapFromView(View view) { //Define a bitmap with the same size as the view Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888); //Bind a canvas to it Canvas canvas = new Canvas(returnedBitmap); //Get the view background Drawable bgDrawable = view.getBackground(); if (bgDrawable != null) //has background drawable, then draw it on the canvas bgDrawable.draw(canvas); else //does not have background drawable, then draw white background on the canvas canvas.drawColor(Color.WHITE); // draw the view on the canvas view.draw(canvas); //return the bitmap return returnedBitmap; } } 

What you definitely want to achieve

First second

Third??
enter image description here

+5
source

Define a TextView

 <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="12dp" android:text="O" android:textColor="#88022b54" android:textSize="250sp" android:textStyle="bold" android:shadowColor="#ff2e7cca" android:shadowDx="0" android:shadowDy="0" android:shadowRadius="1"/> 

Then

 Shader shader = new LinearGradient( 0, mytv.getTextSize()/2, mytv.getTextSize(), mytv.getTextSize()/2, Color.RED, Color.BLUE, Shader.TileMode.CLAMP); mytv.getPaint().setShader(shader); 
+1
source

You can do it as follows:

 String text = "<font color=#cc0029>Erste Farbe</font> <font color=#ffcc00>zweite Farbe</font>"; yourtextview.setText(Html.fromHtml(text)); 
+1
source

Source: https://habr.com/ru/post/1243590/


All Articles