【发布时间】:2018-03-13 22:15:54
【问题描述】:
我必须为添加到回收站视图中的每个项目创建一个新的自定义视图。
@Override
public ListViewAdapter.BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
BaseViewHolder viewHolder =new BaseViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(BaseViewHolder holder, int position) {
if(holder instanceof BaseViewHolder){
circleAnimationViewClass =new CircleAnimationView(mContext);
circleAnimationViewClass.addRadius(circleList.get(position).getRadius());
circleAnimationViewClass.addSpeed(circleList.get(position).getSpeed());
circleAnimationViewClass.addColor(circleList.get(position).getColor());
if(getItemViewType(position) >-1){
circleAnimationViewClass.onStart();
holder.bindCircle(circleList.get(position));
}
}
}
public class BaseViewHolder extends RecyclerView.ViewHolder {
protected Context mActivityContext;
View circleAnimationView;
TextView radiusTextView;
TextView speedTextView;
public BaseViewHolder(View itemView) {
super(itemView);
this.circleAnimationView = (CircleAnimationView ) itemView.findViewById(R.id.animationView);
this.radiusTextView = (TextView)itemView.findViewById(R.id.radiusText);
this.speedTextView=(TextView)itemView.findViewById(R.id.speedText);
mActivityContext =itemView.getContext();
}
public void bindCircle(CircleProperties objCircle){
circleAnimationViewClass.drawCanvas((CircleProperties)objCircle);
circleAnimationViewClass.invalidate();
}
}
这是我的圆形动画课
public void addRadius(int radius){
circleRadius =radius;
}
public void addSpeed(int speed){
circleSpeed=speed;
}
public void addColor(int color){
circleColor= color;
}
public CircleAnimationView(Context context, AttributeSet attributes)
{
super(context, attributes);
TypedArray typedArray = context.obtainStyledAttributes(attributes, R.styleable.CircleAnimationView);
circleRadius = typedArray.getColor(R.styleable.CircleAnimationView_radius, 20);
circleSpeed = typedArray.getColor(R.styleable.CircleAnimationView_speed, 100);
circleColor =typedArray.getColor(R.styleable.CircleAnimationView_circleColor, Color.BLACK);
typedArray.recycle();
}
@Override
public void onDraw(Canvas canvas)
{
super.onDraw(canvas);
Paint paint = new Paint();
paint.setStrokeWidth(5);
paint.setColor(circleColor);
if (i == 0) {
startXPos = dpToPx(circleRadius);
i = dpToPx(circleRadius);
canvas.drawCircle(startXPos, dpToPx(40), dpToPx(circleRadius), paint);
//canvas.drawCircle(dpToPx(200), dpToPx(200), dpToPx(30), paint);
} else {
startXPos = startXPos >= (canvas.getWidth() - dpToPx(circleRadius)) ? dpToPx(circleRadius) : startXPos + dpToPx(circleSpeed / 16);
canvas.drawCircle(startXPos, dpToPx(40), dpToPx(circleRadius), paint);
}
i++;
}
问题是当我没有在 onDraw 中获得半径和速度的值时。我正在使用 invalidate 来调用自定义视图的 ondraw。主要要求是每次将新项目添加到回收站视图时,我都需要为该项目创建自定义视图并对项目进行自定义操作。
【问题讨论】:
-
“无法识别动画视图”到底是什么意思?
-
我无法将自定义视图添加到列表项。我想在每个列表项中进行自定义画布绘制。 AnimationView 是扩展 View 的自定义视图。
-
还是不清楚。 “无法识别动画视图”究竟是什么意思?您是否收到编译错误?比如“无法解决……”?还是运行时崩溃?如果是这样,例外是什么?
-
这是一个编译错误,提示找不到 animationView 变量。
-
哪一个?
R.layout.animationView、R.id.animationView还是其他?R.id看起来是正确的,所以您确定 XML 布局文件的名称是animationView.xml?
标签: android listview custom-view