【发布时间】:2015-12-14 12:51:16
【问题描述】:
我想创建一个动态指示灯,我想设置颜色。我创建了一个自定义组件扩展视图。我手动输入了Color.RED。但是我想从我的Activity类中设置颜色。请帮我做这个朋友
import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class IndicatorView extends View {
private Paint paint;
private Paint paintBlur;
private int iColor;
public IndicatorView(Context context,int mColor) {
super(context);
this.iColor = mColor;
init();
}
public IndicatorView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public IndicatorView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
paint = new Paint();
paint.setAntiAlias(true);
paint.setDither(true);
paint.setColor(iColor);
paint.setStrokeWidth(20f);
paint.setStyle(Paint.Style.FILL);
paintBlur = new Paint();
paintBlur.set(paint);
paintBlur.setColor(iColor);
paintBlur.setStrokeWidth(30f);
paintBlur.setMaskFilter(new BlurMaskFilter(15, BlurMaskFilter.Blur.SOLID));
}
@Override
protected void onDraw(Canvas canvas) {
final int width = getWidth() - getPaddingLeft() - getPaddingRight();
final int height = getHeight() - getPaddingTop() - getPaddingBottom();
final int cx = width / 2;
final int cy = height / 2;
final float diameter = Math.min(width,height) - paint.getStrokeWidth();
final float radius = diameter / 2;
canvas.drawCircle(cx,cy,radius,paint);
canvas.drawCircle(cx,cy,radius,paintBlur);
}
public int getmColor() {
return iColor;
}
public void setmColor(int iColor) {
this.iColor = iColor;
}
}
我的活动:
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IndicatorView indicatorView = new IndicatorView(this);
/*IndicatorView myIndicator = (IndicatorView) findViewById(R.id.myIndicator);
myIndicator.setmColor(R.color.colorAccent);*/
}
}
活动 XML :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#FF000000"
tools:context="com.sample.mysampleapp.MainActivity">
<com.sample.mysampleapp.IndicatorView
android:id="@+id/myIndicator"
android:layout_width="50dp"
android:layout_height="50dp" />
</RelativeLayout>
【问题讨论】:
-
在
setColor()方法中你只是改变了颜色变量,你应该重绘组件。 -
@Gonzalo bro 你能帮我重新绘制代码吗?
-
public IndicatorView(Context context,int color) { super(context);在里面(); } //像这样传递颜色并设置
-
只是在
setColor中使您的自定义View无效 -
@askarcali 请立即查看..
标签: java android android-custom-view android-color