Sunteți pe pagina 1din 5

LAPORAN TUGAS PPPB2

“FAN CONTROLER”

Disusun oleh :
Dear Nasyita
17/410830/SV/12757

PROGRAM STUDI D3 KOMPUTER DAN SISTEM INFORMASI


SEKOLAH VOKASI
UNIVERSITAS GADJAH MADA
YOGYAKARTA
2019

MainActivity.java
package com.example.customfancontroller;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

DialView.java
package com.example.customfancontroller;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class DialView extends View {

private static int SELECTION_COUNT = 4;


private float mWidth;
private float mHeight;
private Paint mTextPaint;
private Paint mDialPaint;
private float mRadius;
private int mActiveSelection;
private final StringBuffer mTempLabel = new StringBuffer(8);
private final float[] mTempResult = new float[2];

public DialView(Context context) {


super(context);
init();
}

public DialView(Context context, AttributeSet attrs) {


super(context, attrs);
init();
}

public DialView(Context context, AttributeSet attrs, int defStyleAttr) {


super(context, attrs, defStyleAttr);
init();
}

private void init() {


mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setColor(Color.BLACK);
mTextPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mTextPaint.setTextAlign(Paint.Align.CENTER);
mTextPaint.setTextSize(40f);
mDialPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mDialPaint.setColor(Color.GRAY);

mActiveSelection = 0;

setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mActiveSelection = (mActiveSelection + 1) % SELECTION_COUNT;
if (mActiveSelection >= 1) {
mDialPaint.setColor(Color.GREEN);
} else {
mDialPaint.setColor(Color.GRAY);
}
invalidate();
}
});
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
mWidth = w;
mHeight = h;
mRadius = (float) (Math.min(mWidth, mHeight) / 2 * 0.8);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawCircle(mWidth / 2, mHeight / 2, mRadius, mDialPaint);

final float labelRadius = mRadius + 20;


StringBuffer label = mTempLabel;
for (int i = 0; i < SELECTION_COUNT; i++) {
float[] xyData = computeXYForPosition(i, labelRadius);
float x = xyData[0];
float y = xyData[1];
label.setLength(0);
label.append(i);
canvas.drawText(label, 0, label.length(), x, y, mTextPaint);
}
final float markerRadius = mRadius - 35;
float[] xyData = computeXYForPosition(mActiveSelection, markerRadius);
float x = xyData[0];
float y = xyData[1];
canvas.drawCircle(x, y, 20, mTextPaint);
}

private float[] computeXYForPosition(final int pos, final float radius) {


float[] result = mTempResult;
Double startAngle = Math.PI * (9 / 8d);
Double angle = startAngle + (pos * (Math.PI / 4));
result[0] = (float) (radius * Math.cos(angle)) + (mWidth / 2);
result[1] = (float) (radius * Math.sin(angle)) + (mHeight / 2);
return result;
}
}

activity_main.xml
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">

<TextView
android:id="@+id/customViewLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/wide_padding"
android:text="@string/customViewLabel"
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
android:layout_marginLeft="@dimen/standard_margin"
android:layout_marginStart="@dimen/standard_margin"
android:layout_marginEnd="@dimen/standard_margin"
android:layout_marginRight="@dimen/standard_margin"
android:layout_marginTop="@dimen/wide_margin"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />

<com.example.customfancontroller.DialView
android:id="@+id/dialView"
android:layout_width="@dimen/dial_width"
android:layout_height="@dimen/dial_height"
android:layout_marginTop="@dimen/standard_margin"
android:layout_marginRight="@dimen/standard_margin"
android:layout_marginLeft="@dimen/standard_margin"
app:layout_constraintTop_toBottomOf="@+id/customViewLabel"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent" />

</android.support.constraint.ConstraintLayout>

S-ar putea să vă placă și