Android 사용자 정의 보기 프로 세 스 분석
사용자 정의 view 작성
논리 스 레 드 가입
사용자 정의 view 추출 및 패키지
4.567917.4.xml 에서 스타일 을 정의 하여 표시 효과 에 영향 을 줍 니 다사용자 정의 view 작성
1.xml 에서 자신의 view 사용
<!-- view , -->
<com.niuli.view.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffff00"
/>
2.view 를 계승 하여 ondraw 를 실현 하 는 방법
public class MyView extends View {
Bitmap bitmap;
public MyView(Context context) {
super(context);
/**
* getResources()
*/
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
/**
* Canvas ,
*
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
/**
* Paint , , ,bit
*/
Paint paint = new Paint();
// ,
paint.setColor(Color.BLUE);
//
paint.setTextSize(30);
canvas.drawText(" view", 0, 30, paint);
//
canvas.drawLine(0, 60, 100, 60, paint);
//
//
paint.setStyle(paint.getStyle().STROKE);
RectF rec = new RectF(0, 90, 100, 190);
canvas.drawRoundRect(rec, 20, 20, paint);
//
canvas.drawBitmap(bitmap, 0, 350, paint);
}
}
효과.2.사용자 정의 view+스 레 드 사용 제어
텍스트 와 원형 을 그립 니 다.스 레 드 제 어 를 통 해 화면 에서 이동 할 수 있 습 니 다.
public class MyViewtwo extends View {
//
private Paint paint = new Paint();
private int x;
private float sweepAngle;
private control thread;
private Random random = new Random();
public MyViewtwo(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyViewtwo(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
paint.setTextSize(80);
//
canvas.drawText(" ", x, 70, paint);
//
RectF rect = new RectF(0 ,80 ,100, 160);
canvas.drawArc(rect, 0, sweepAngle, true, paint);
//
if (thread ==null) {
thread = new control();
thread.start();
}
}
public class control extends Thread{
@Override
public void run() {
while(true){
x +=3;
sweepAngle++;
if (x>getWidth()) {
x = (int) (0 - paint.measureText(" "));
}
//
if (sweepAngle>360) {
sweepAngle = 0;
}
//
paint.setARGB(255, random.nextInt(255), random.nextInt(255), random.nextInt(255));
//
postInvalidate();
try {
sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
효과. 3.모 바 일 프로그램 패키지,모듈 화 사상
포장 은 주로 추상 적 인 방법 을 사용 하 는데 하위 클래스 를 계승 한 후에 이런 방법 만 실현 하면 운행 할 수 있 고 절 차 를 크게 간소화 했다.
public abstract class MyViewtwo extends View {
private control thread;
public MyViewtwo(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyViewtwo(Context context) {
super(context);
}
// , ,
protected abstract void drawsub(Canvas canvas);
@Override
protected final void onDraw(Canvas canvas) {
//
if (thread ==null) {
thread = new control();
thread.start();
}else {
drawsub(canvas);
}
}
// ,
protected abstract void move();
public class control extends Thread{
@Override
public void run() {
while(true){
move();
//
postInvalidate();
try {
sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
4.xml 에서 스타일 을 정의 하여 디 스 플레이 효과 에 영향 을 줍 니 다.1.첫 번 째 단 계 는 value 폴 더 에 자신의 스타일 파일 을 만 드 는 것 입 니 다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="NumText">
<attr name="lineNum" format="integer"/>
<attr name="xScroll" format="boolean" />
</declare-styleable>
</resources>
2.xml 에 네 임 스페이스 를 먼저 추가 한 다음 에 속성 을 직접 사용 할 수 있 습 니 다.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:nt="http://schemas.android.com/apk/res/com.jikexueyuan.myview"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.jikexueyuan.myview.v4.NumText
android:layout_width="match_parent"
android:layout_height="match_parent"
nt:lineNum="6"
nt:xScroll="true"/>
</FrameLayout>
3.코드 에 xml 에서 정 의 된 이 요 소 를 해석 해 야 합 니 다.
public NumText(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.NumText);
lineNum = ta.getInt(R.styleable.NumText_lineNum, 1);
xScroll = ta.getBoolean(R.styleable.NumText_xScroll, false);
ta.recycle();
}
주로 상기 방법 과 xml 에서 정 의 된 요소 값 을 이용 하여 노출 과 관련 이 있다.이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.