如何将Android中的片段分为两种颜色

Eth*_*han 5 android android-studio

首先,我想说请不要将此问题标记为重复.它在一个关键方面与其他帖子不同.有没有人知道我可以将片段的颜色分成中间的两种颜色?感谢大家!

Lok*_*ari 5

这里是使用渐变的示例

  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);
Run Code Online (Sandbox Code Playgroud)

实现Second Simply用户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>
Run Code Online (Sandbox Code Playgroud)

对于第三个,你必须写一点,并在像素级别做一些工作

<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" />
Run Code Online (Sandbox Code Playgroud)

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's 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;
}
}
Run Code Online (Sandbox Code Playgroud)

你究竟想要实现什么?
第一个
第二个
第三个第一个??
在此输入图像描述


Eth*_*han -1

我通过在 Photoshop 中创建理想的背景,将其另存为.png,然后将其设置为我需要的活动背景来实现这一目标。简单、干净、容易,而且因为我只需要它始终是两种颜色,所以我不必担心图像会像素化。