2017-09-06 7 views
1

아래 그림과 같이 사용자가 경험치를 얻고 레벨이 증가하는 게임을 만들려고합니다.육각형 모양의 ProgressBar

enter image description here

나는 진행률 표시 줄의 사용이 달성의 생각,하지만 난 육각의 모양 진행률 표시 줄을 만들 수 없습니다입니다.

사용자 점수가 증가함에 따라 노란색 줄이 증가해야합니다.

사람이 나에게 나는이 ??를 달성 할 수있는 방법에 대한 아이디어를 줄 수 (나는 사용자의 ProgressBar을 시도했지만 작동하지 않았다.)

감사합니다.

+1

확인이 https://stackoverflow.com/questions/44943803/custom-form-of-progress-bar –

+1

나는이 시도하고 당신을 드리겠습니다 know .... :) – Benedict

+1

@NileshRathod 나는 그 코드에 약간의 변경을가했고 progressbar는 잘 작동한다. 감사합니다. :) – Benedict

답변

1

Nilesh mentioned 코드를 변경하고 커브가없는 progressbar를 만들었습니다.

나를 위해 잘 작동합니다.

이제 진행률 표시 줄에 이미지를 삽입하는 방법을 알아야합니다. : P

package com.example.benedict.progress; 

import android.animation.ObjectAnimator; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Matrix; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PathMeasure; 
import android.graphics.RectF; 
import android.support.annotation.Nullable; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.ImageView; 


public class V extends View implements View.OnClickListener { 
Path segment = new Path(); 
Paint paint = new Paint(); 
PathMeasure pm; 
String TAG = "View"; 
Path path; 

public V(Context context) { 
    super(context); 
    init(); 
} 

public V(Context context, @Nullable AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public V(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(); 
} 

public V(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    init(); 
} 

void init() { 
    setOnClickListener(this); 
    paint.setColor(0xaa00ff00); 
    paint.setStyle(Paint.Style.STROKE); 
    paint.setStrokeWidth(10); 
    paint.setStrokeCap(Paint.Cap.ROUND); 

} 

@Override 
protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    Path src = new Path(); 

    src.moveTo(8.80000f, 0.630000f);//0 
    src.lineTo(26.030001f, 0.630000f);//1 
    src.lineTo(32.109999f, 14.030000f);//2 
    src.lineTo(26.030001f, 28.440001f);//3 
    src.lineTo(7.800000f, 28.440001f);//4 
    src.lineTo(2.200000f, 14.030000f);//5 
    src.lineTo(8.80000f, 0.630000f);//6 


    Matrix m = new Matrix(); 
    RectF srcRect = new RectF(0, 0, 32, 40); 
    RectF dstRect = new RectF(0, 0, w, h); 

    dstRect.inset(paint.getStrokeWidth()/2, paint.getStrokeWidth()/2); 
    m.setRectToRect(srcRect, dstRect, Matrix.ScaleToFit.CENTER); 

    Path dst = new Path(); 
    src.transform(m, dst); 
    pm = new PathMeasure(dst, true); 
    pm.getSegment(0, pm.getLength()/2, segment, true); 
    // segment.rLineTo(0, 0); 
    setProgress(pm.getLength()); 
} 

void setProgress(float progress) { 
    segment.reset(); 
    float start = 0; 
    float end = (progress); 
    if (start < end) { 
     pm.getSegment(start, end, segment, true); 
    } /*else { 
     pm.getSegment(start, length, segment, true); 
     // pm.getSegment(0, end, segment, true); 
    }*/ 
    segment.rLineTo(0, 0); 
    invalidate(); 
} 

    @Override 
    public void onClick(View v) { 
    ObjectAnimator.ofFloat(this, "progress", 0, 
    pm.getLength()).setDuration(5 * 2500).start(); 
    Log.d(TAG, pm.getLength() + ""); 
} 

    @Override 
    protected void onDraw(Canvas canvas) { 

     canvas.drawPath(segment, paint); 

    } 
} 

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/loading_status" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_gravity="center" 
android:gravity="center_horizontal" 
android:orientation="vertical" 
android:background="#000" 
android:visibility="visible" > 


<com.example.benedict.progress.V 
    android:id="@+id/progress" 
    android:src="@drawable/poster1" 
    android:scaleType="centerCrop" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:visibility="visible" /> 



</LinearLayout> 
+1

Aslo share layout.xml –