2013-09-21 3 views
1

매우 간단한 사용자 정의보기에 문제가 있습니다. 그 의도는 단순한 수직 점선 만 그리는 것입니다. 상위 컨테이너의 눌려진 상태에 따라 선의 색상을 변경하고 싶습니다. 내가보기를 눌러 후 onDraw 메서드가 호출되지 가져옵니다,사용자 정의보기에 눌린 상태가 채워지지 않습니다.

public class DottedLine extends View { 

    float density ; 
    float size; 
    Paint paint; 

    public DottedLine(Context context) { 
     this(context, null, 0); 
    } 

    public DottedLine(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public DottedLine(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     DisplayMetrics metrics = getContext().getResources().getDisplayMetrics(); 
     density = metrics.density; 
     size = 2 * density; //2dp 
     paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL_AND_STROKE); 
     paint.setStrokeWidth(size); 
     paint.setColor(getResources().getColor(R.color.main_kosapp)); 
     paint.setPathEffect(new DashPathEffect(new float[] {size, size}, 0)); 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     float diff = canvas.getHeight()%size; 

     Path path = new Path(); 
     path.moveTo(canvas.getWidth()/2, diff/2); 
     path.lineTo(canvas.getWidth()/2,canvas.getHeight()-diff/2); 

     if(this.isPressed() || this.isFocused()) { 
      paint.setColor(getResources().getColor(R.color.light_gray)); 
     } else { 
      paint.setColor(getResources().getColor(R.color.main_kosapp)); 
     } 
     canvas.drawPath(path, paint); 
    } 
} 

문제는 :이 코드가 있습니다. duplicateParentState을 true로 설정하려고 시도했지만 전혀 도움이되지 않았습니다. 참고로이 레이아웃에는 두 개의 직접 형제가 있습니다 - 텍스트 뷰 - 선택기로 텍스트 색을 정의하고 텍스트 뷰에 사용할 수 있습니다. 내보기 구현에 문제가 있습니까? 선택기를 작동 시키려면 클래스에 무엇을 추가해야합니까?

+0

시도는'추가 모션 이벤트를 사용하지 않고 나를 위해 일한 그 이상의 안드로이드 : 클릭에'= "true"를 사용자 정의'보기 '를위한 xml. –

+0

사용자 정의보기의 레이아웃에서 android : duplicateParentState = "true"를 추가하십시오. –

답변

0

당신은 dispatchSetPressed

@Override 
protected void dispatchSetPressed(boolean pressed) { 
    super.dispatchSetPressed(pressed); 
    invalidate(); 
} 

를 재정 의하여 눌림 상태에 대한보기를 무효화해야