아래 그림과 같이 사용자가 경험치를 얻고 레벨이 증가하는 게임을 만들려고합니다.육각형 모양의 ProgressBar
나는 진행률 표시 줄의 사용이 달성의 생각,하지만 난 육각의 모양 진행률 표시 줄을 만들 수 없습니다입니다.
사용자 점수가 증가함에 따라 노란색 줄이 증가해야합니다.
사람이 나에게 나는이 ??를 달성 할 수있는 방법에 대한 아이디어를 줄 수 (나는 사용자의 ProgressBar을 시도했지만 작동하지 않았다.)
감사합니다.
아래 그림과 같이 사용자가 경험치를 얻고 레벨이 증가하는 게임을 만들려고합니다.육각형 모양의 ProgressBar
나는 진행률 표시 줄의 사용이 달성의 생각,하지만 난 육각의 모양 진행률 표시 줄을 만들 수 없습니다입니다.
사용자 점수가 증가함에 따라 노란색 줄이 증가해야합니다.
사람이 나에게 나는이 ??를 달성 할 수있는 방법에 대한 아이디어를 줄 수 (나는 사용자의 ProgressBar을 시도했지만 작동하지 않았다.)
감사합니다.
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>
Aslo share layout.xml –
확인이 https://stackoverflow.com/questions/44943803/custom-form-of-progress-bar –
나는이 시도하고 당신을 드리겠습니다 know .... :) – Benedict
@NileshRathod 나는 그 코드에 약간의 변경을가했고 progressbar는 잘 작동한다. 감사합니다. :) – Benedict