2016-02-22 16 views
5

Trước tiên tôi muốn nói xin vui lòng không đánh dấu câu hỏi này là trùng lặp. Nó khác với các bài viết khác theo một cách quan trọng. Có ai biết một cách mà tôi có thể chia màu sắc của mảnh thành hai màu sắc ngay xuống giữa? Cảm ơn mọi người!Cách chia Phân đoạn trong Android thành Hai Màu

+0

@Shark Tôi không nghĩ rằng Spannables có thể được sử dụng chia hiển thị của một chữ cái duy nhất. Bạn có thể thay đổi mọi thứ cho mỗi chữ cái, nhưng đó không phải là những gì OP hỏi. –

+0

@ DougStevenson đủ công bằng, tôi đã không thực sự hiểu rõ những gì OP hỏi. Tôi vẫn không ... Ồ, tôi nghĩ mình đã hiểu rồi. Ví dụ: anh ta muốn một lá thư 'A' màu đỏ-đen là màu đỏ ở nửa bên trái và màu đen ở nửa bên phải. – Shark

+1

Chúng ta có chắc đó là những gì OP hỏi? "phân chia màu của chế độ xem văn bản" cho tôi biết rằng nền văn bản của nó mà anh ta muốn chia làm hai, không phải là hiển thị chữ cái. Ông CÓ THỂ có nghĩa là, nhưng nó không rõ ràng. OP? –

Trả lời

-1

tôi đạt được điều này bằng cách tạo nền lý tưởng trong photoshop, lưu nó dưới dạng .png, và sau đó thiết lập đó làm nền hoạt động cho khi tôi cần nó. Đơn giản, sạch sẽ, dễ dàng, và bởi vì tôi chỉ cần nó là hai màu sắc tất cả các thời gian, tôi không phải lo lắng về hình ảnh trở thành pixelated.

5

đây là mẫu để sử dụng độ dốc

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); 

Để đạt được thứ hai Đơn giản chỉ cần sử dụng 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> 

Đối với một thứ ba bạn phải viết ít và làm một số công việc về mức độ điểm ảnh

<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'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; 
} 
} 

Điều bạn muốn đạt được là gì?
Đầu tiên một
Second một
một thứ ba ??
enter image description here

+0

Tôi có thể áp dụng mã này cho một Phân đoạn không? – Ethan

+1

Nếu bạn có thể cho tôi biết bạn muốn chính xác ai? Tôi sẽ đăng mã cho phù hợp. –

+0

Điều thứ hai tôi đang cố gắng đạt được, ngoại trừ toàn bộ phân đoạn sẽ được chia thành hai màu. – Ethan

1

Xác định một 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"/> 

Sau đó

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

Tôi có thể áp dụng mã này cho một Phân đoạn không? – Ethan

+0

Theo như tôi biết, không có vấn đề gì. Bạn đã thấy chạy chưa? Nó gần như những gì bạn muốn, phải không? – statosdotcom

+0

Không, tôi không thể gửi cho tôi một liên kết? Bạn cũng có thể chỉnh sửa mã thành fragment_standard không? Nó cần phải được chia theo chiều dọc sao cho màu đỏ nằm ở nửa bên trái và màu xanh ở nửa bên phải – Ethan

1

Bạn có thể làm như thế này

String text = "<font color=#cc0029>Erste Farbe</font> <font color=#ffcc00>zweite Farbe</font>"; 
yourtextview.setText(Html.fromHtml(text)); 
Các vấn đề liên quan