android UI 추가 단추 그리 기

8459 단어 androidUI버튼
본 논문 의 사례 는 안 드 로 이 드 UI 가 마이너스 버튼 을 그 리 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
프로젝트 에서 우 리 는 항상 이런 view 를 사용한다.

이때 우 리 는 두 개의 그림 을 사용 하여 서로 전환 하 는 것 을 선택 할 것 이다.사실 기본 적 인 2D 그래 픽 과 같은 간단 한 그림 을 스스로 그 릴 수만 있다 면 문제없다.
내 가 만 든 효과 도 를 먼저 보 여 준다.

다음은 여러분 이 참고 할 수 있 도록 플러스 마이너스 로 그 려 진 코드 를 드 리 겠 습 니 다.
다음은 핵심 코드 입 니 다.

/**
 * + 
 */
public class AddView extends View {

    protected Paint paint;
    protected int HstartX, HstartY, HendX, HendY;//    
    protected int SstartX, SstartY, SsendX, SsendY;//    
    protected int paintWidth = 2;//         10
    protected int paintColor = Color.BLACK;//      
    protected int padding = 3;//  3 padding

    public int getPadding() {
        return padding;
    }

    //     ,  padding   
    public void setPadding(int padding) {
        SsendY = HendX = width - padding;
        SstartY = HstartX = padding;
    }

    //     ,      
    public void setPaintColor(int paintColor) {
        paint.setColor(paintColor);
    }

    //     ,      
    public void setPaintWidth(int paintWidth) {
        paint.setStrokeWidth(paintWidth);
    }

    public AddView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    private void initView() {
        paint = new Paint();
        paint.setColor(paintColor);
        paint.setStrokeWidth(paintWidth);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int width;
        if (widthMode == MeasureSpec.EXACTLY) {
            //  MeasureSpec.EXACTLY   view        
            width = widthSize;
        } else {
            width = 60;//   
        }
        SstartX = SsendX = HstartY = HendY = width / 2;
        SsendY = HendX = width - getPadding();
        SstartY = HstartX = getPadding();
        //              ,      
        setMeasuredDimension(width, width);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //     
        canvas.drawLine(HstartX, HstartY, HendX, HendY, paint);
        //     
        canvas.drawLine(SstartX, SstartY, SsendX, SsendY, paint);
    }
}

/**
 * - 
 */
public class RemoveView extends AddView {

    public RemoveView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //     ,           
        canvas.drawLine(HstartX, HstartY, HendX, HendY, paint);
    }
}
그 중에서 도 횡선 과 세로 선의 위 치 를 계산 하 는 것 이 중요 하 다.view 의 폭 을 가 져 온 후 view 를 정사각형 으로 설정 하고 다음 과 같이 합 니 다.

이렇게 해서 가장 중요 한 플러스 마이너스 번 호 를 다 만 들 었 고 다른 것 은 모두 작은 뜻 이다.
나 는 주요 xml 파일 을 붙 였 다.
주 보기:layotadd_remove.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="3dp"
    android:padding="2dp"
    android:background="@drawable/bg_add_remove_view"
    android:orientation="horizontal">

    <com.android.ui.TextView.AddView
        android:id="@+id/add_view"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical"
        android:background="@drawable/bg_add_view" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_margin="3dp"
        android:background="@null"
        android:inputType="number"
        android:text="0" />

    <com.android.ui.TextView.RemoveView
        android:id="@+id/remove_view"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical"
        android:background="@drawable/bg_remove_view" />

</LinearLayout>
주 보기 배경:bgadd_remove_view.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--        -->
    <corners android:radius="5dp" />
    <!--          -->
    <solid android:color="@android:color/white" />
    <!--       -->
    <stroke
        android:width="0.5dp"
        android:color="@android:color/darker_gray" />
</shape>
플러스 배경:bgadd_view.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bg_add_true" android:state_pressed="true" />
<item android:drawable="@drawable/bg_add_false" android:state_pressed="false" />
</selector>

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--       -->
    <item>
        <shape>
            <solid android:color="@android:color/darker_gray" />
        </shape>

    </item>
    <item
        android:bottom="0dp"
        android:left="0dp"
        android:right="0.5dp"
        android:top="0dp">
        <!--         -->
        <shape>
            <!--         -->
            <solid android:color="@android:color/darker_gray" />
        </shape>
    </item>
</layer-list>

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--       -->
    <item>
        <shape>
            <solid android:color="@android:color/darker_gray" />
        </shape>

    </item>
    <item
        android:bottom="0dp"
        android:left="0dp"
        android:right="0.5dp"
        android:top="0dp">
        <!--         -->
        <shape>
            <!--         -->
            <solid android:color="@android:color/white" />
        </shape>
    </item>
</layer-list>
마이너스 의 배경 색 설정 은 플러스 와 같 습 니 다.세로 선의 위치 가 다 를 뿐 입 니 다.

<item
        android:bottom="0dp"
        android:left="0.5dp"
        android:right="0dp"
        android:top="0dp">
우 리 는 그림 을 전혀 사용 하지 않 은 상태 에서 이 ui 를 완성 할 수 있다.
물론 최적화 할 점 이 많다.예 를 들 어 padding 을 설정 하고 마이너스 색상 을 수정 하면 이 레이아웃 의 크기 는 모두 코드 를 통 해 이 루어 질 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기