2013-11-02 2 views
0

ListView의 경우 개별 ListView 요소에 진행률 표시기를 지정하고 싶습니다. 말하자면 진행률 막대 목록이 필요합니다. 그러나 listview 요소는 각각 TextView 형식의 텍스트 오버레이를 가지며 이는 진행률 막대의 영향을받지 않아야합니다.선형 레이아웃 배경을 다른 색상 부분으로 나눕니다.

내가 사진이 경우에는 말보다 더 많은 것을 말할 수 있다고 생각합니다, 그래서 여기에 내가 원하는 거의이다

background progress bar

는 내가 개별 LinearLayout들에게 "sublayouts"를 추가하고 변경할 수 있습니다 알고있는 이런 약간 보인다 프로그래밍 중량 : 다음

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

<LinearLayout 
    android:id="@leftSide" 
    android:background="@color/green" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_weight="0.8" > 
</LinearLayout> 
<LinearLayout 
    android:id="@rightSide" 
    android:background="@color/red" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_weight="0.2" > 
</LinearLayout> 

</LinearLayout> 

및 프로그래밍 (완료되지 않은) 양측 중량을 변경

float weightLeft = 0.8f; 
float weightRight = 1f-weightLeft; 

android.widget.LinearLayout.LayoutParams paramsLeft = new android.widget.LinearLayout.LayoutParams(
     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, weightLeft); 
LinearLayout left = (LinearLayout) findViewById(R.id.leftside); 
left.setLayoutParams(paramsLeft); 

android.widget.LinearLayout.LayoutParams paramsRight = new android.widget.LinearLayout.LayoutParams(
     LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, weightRight); 
LinearLayout right = (LinearLayout) findViewById(R.id.rightside); 
left.setLayoutParams(paramsRight); 

하지만 지금은 문제가 있습니다. 어떻게 textviews를 부모 선형 레이아웃에두고 아이들을 무시합니까? LinearLayouts?

drawables을 사용하여 배경 부품의 분포를 분할하는 방법이 있다고 상상해 볼 수 있습니다.하지만 프로그래밍 방식이 아닌 방법을 알지 못합니다.

도움을 주시면 감사하겠습니다.

답변

1

이 사용자 정의 그리기를 시도 mFraction은 [0..1]입니다 : 최고

public class FractionDrawable extends Drawable { 
    private Paint mPaint; 
    private float mFraction; 

    public FractionDrawable(float fraction) { 
     mPaint = new Paint(); 
     setFraction(fraction); 
    } 

    public void setFraction(float fraction) { 
     mFraction = fraction; 
     invalidateSelf(); 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     Rect b = getBounds(); 
     mPaint.setColor(0xff00aa00); 
     float x = b.width() * mFraction; 
     canvas.drawRect(0, 0, x, b.height(), mPaint); 
     mPaint.setColor(0xffaa0000); 
     canvas.drawRect(x, 0, b.width(), b.height(), mPaint); 
    } 

    @Override 
    public void setAlpha(int alpha) { 
    } 

    @Override 
    public void setColorFilter(ColorFilter cf) { 
    } 

    @Override 
    public int getOpacity() { 
     return PixelFormat.TRANSLUCENT; 
    } 
} 
+0

! 이것은 매력처럼 작동합니다! 정말 고마워 :) – sirio0816

관련 문제