在主活动中单击按钮更改画布

时间:2013-02-14 17:57:34

标签: java android android-canvas android-animation onclicklistener

我正在努力解决这背后的逻辑,所以任何提示都会受到赞赏。我有两个类,一个在其中创建片段,另一个在我的自定义视图中创建,我正在尝试做一些动画。在主布局中,我有一个编辑文本字段和一个按钮。我想要做的是在单击按钮时添加到自定义视图,编辑文本中的文本将添加到自定义视图。考虑如何做到这一点,我画了一个空白,我开始认为这是不可能的。我应该在自定义视图中创建编辑文本吗?这是显示我正在做什么的代码(但是仍然坚持下一步,或者我是否应该废弃这种方法并尝试不同的方法)

主要片段

public class DestroyerView extends Fragment
{



    private Context mContext;
    Paint paint = new Paint();
    private AnimatedNegative PositiveAnimatedNegative;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        mContext = this.getActivity();
        View view = inflater.inflate(R.layout.activity_destroyer, container, false);
        final Button fire = (Button) view.findViewById(R.id.destroy);
        PositiveAnimatedNegative = (AnimatedNegative) view.findViewById(R.id.anim_view);
        fire.setOnClickListener(new OnClickListener()
            {
            @Override
            public void onClick(View arg0) 
                {
                // logic here?
                }
            });
       return view;

    }
}


public AnimatedNegative(Context context, AttributeSet attrs)  

{

        super(context, attrs);


        mContext = this.getContext();

        h = new Handler();
        mCalendarDbHelper=new CalendarDbAdapter(mContext);
        mCalendarDbHelper.open();


}    

    private Runnable r= new Runnable() 
    {
    @Override
    public void run() 
            {
        invalidate(); 
    }
    };



    protected void onDraw (Canvas canvas)
    {
     String word = "This is a sentence";
     paint.setColor(Color.parseColor("#1E90FF")); 
     paint.setStyle(Style.FILL); 
     canvas.drawPaint(paint); 
     paint.setColor(Color.BLACK); 
     paint.setTextSize(20); 
     x = this.getWidth()/2;
     y = this.getHeight()/2;
     canvas.drawText(word, x, y, paint);
     }
   }

...如果我可以引用自定义视图中的按钮,这会更容易,但似乎我不能这样做,或者我可以简单地添加到主要活动内的自定义视图类,但似乎我也不能这样做(不是没有创建一个新的画布,这似乎做了太多我想做的事情(只是添加单词))。那么,最后,我正在努力做到这一点的方式是死路一条?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

我想我明白了。我将使用我的主要活动中定义的AnimatedNegative对象调用invalidate,然后从编辑文本传递单词和true值,以便我可以在视图中检查它并重绘。添加了以下代码:

在主要活动中:

        public void onClick(View arg0) 
            {
            PositiveAnimatedNegative.invalidate();
            PositiveAnimatedNegative.add = true;
            PositiveAnimatedNegative.positive_word = "This is a positive word";
            }

在自定义视图中:

            if (add == true)
            {
                canvas.drawText(positive_word, x,y, paint);
            }