2015-02-05 48 views
-1

在我的程序中,基本是: -Android程序处理一个又一个的任务

当程序打开时它会显示一个动画,然后它会显示饼图结果。

我的代码是:---

public class Popup_animation11 extends Activity { 

    private static int[] COLORS = new int[] { Color.MAGENTA, Color.CYAN }; 
    LinearLayout layout; 

    private CategorySeries mSeries = new CategorySeries(""); 
    private DefaultRenderer mRenderer = new DefaultRenderer(); 
    private GraphicalView mChartView; 
    Context ctx; 

    private TransparentProgressDialog pd; 
    private Handler h; 
    private Runnable r; 

    EditText name1,name2; 

    private int[] VALUES = { 40,60 }; 
    String x1,y1; 
    Button btnOpenPopup; 
    String[] NAME_LIST ; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.popup_main); 

     Button btnOpenPopup = (Button)findViewById(R.id.openpopup); 
     btnOpenPopup.setOnClickListener(new Button.OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 

       pd.show(); 
      } 
     }); 


     h = new Handler(); 
      pd = new TransparentProgressDialog(this, R.drawable.uktrafficlights); 
      r =new Runnable() { 
       @Override 
       public void run() { 
        if (pd.isShowing()) { 
         pd.dismiss(); 
        } 
       } 
      }; 



    } 



    @Override 
    protected void onDestroy() { 
     h.removeCallbacks(r); 
     if (pd.isShowing()) { 
      pd.dismiss(); 
     } 
     super.onDestroy(); 
    } 

    private class TransparentProgressDialog extends Dialog { 

     private ImageView iv; 

     public TransparentProgressDialog(Context context, int resourceIdOfImage) { 
      super(context, R.style.TransparentProgressDialog); 
      WindowManager.LayoutParams wlmp = getWindow().getAttributes(); 
      wlmp.gravity = Gravity.CENTER_HORIZONTAL; 
      getWindow().setAttributes(wlmp); 
      setTitle(null); 
      setCancelable(false); 
      setOnCancelListener(null); 
      LinearLayout layout = new LinearLayout(context); 
      layout.setOrientation(LinearLayout.VERTICAL); 
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
      iv = new ImageView(context); 
      iv.setImageResource(resourceIdOfImage); 
      layout.addView(iv, params); 
      addContentView(layout, params); 
     } 

     @Override 
     public void show() { 
      super.show(); 
      RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f); 

      anim.setInterpolator(new LinearInterpolator()); 
      anim.setRepeatCount(Animation.INFINITE); 
      anim.setDuration(3000); 
      iv.setAnimation(anim); 
      iv.startAnimation(anim); 

      anim.setAnimationListener(new Animation.AnimationListener() { 
       @Override 
       public void onAnimationStart(Animation animation) { 



       } 

       @Override 
       public void onAnimationEnd(Animation animation) { 
        //here display data 
        h.postDelayed(r, 100); 
        pd.dismiss(); 
        mRenderer.setApplyBackgroundColor(true); 
        mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50)); 
        mRenderer.setChartTitleTextSize(20); 
        mRenderer.setLabelsTextSize(15); 
        mRenderer.setLegendTextSize(15); 
        mRenderer.setMargins(new int[] { 20, 30, 15, 0 }); 
        mRenderer.setZoomButtonsVisible(true); 
        mRenderer.setStartAngle(90); 
        mChartView = ChartFactory.getPieChartView(ctx, mSeries, mRenderer); 

       LayoutInflater layoutInflater = (LayoutInflater)getBaseContext() .getSystemService(LAYOUT_INFLATER_SERVICE); 


        View popupView = layoutInflater.inflate(R.layout.main_piechart, null); 
          final PopupWindow popupWindow = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); 
          layout = (LinearLayout)popupView.findViewById(R.id.chart); 
          layout.addView(mChartView); 

          name1=(EditText) findViewById(R.id.ext1); 
          name2=(EditText) findViewById(R.id.ext2); 
          x1=name1.getText().toString(); 
          y1=name2.getText().toString(); 
          NAME_LIST = new String[] { x1 , y1 }; 
          for (int i = 0; i < VALUES.length; i++) { 

           mSeries.add(NAME_LIST[i] + "(" + VALUES[i]+"%)", VALUES[i]); 
           SimpleSeriesRenderer renderer = new SimpleSeriesRenderer(); 
           renderer.setColor(COLORS[(mSeries.getItemCount() - 1) % COLORS.length]); 
           mRenderer.addSeriesRenderer(renderer); 
           } 

           if (mChartView != null) { 

           mChartView.repaint(); 

           } 


          Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss); 
          btnDismiss.setOnClickListener(new Button.OnClickListener(){ 

        @Override 
        public void onClick(View v) { 

        popupWindow.dismiss(); 
        }}); 

          popupWindow.showAsDropDown(btnOpenPopup, 50, -30); 

       } 

       @Override 
       public void onAnimationRepeat(Animation animation) { 
        // TODO Auto-generated method stub 


       } 



    }); 

    } 
    } 
} 

但问题是,当我打开程序,动画正在运行,然后stopped.the结果不来了。我的要求是第一次动画,然后结果..但只有动画正在运行..我的代码中的问题在哪里?在此先感谢

在日志报告: -

FATAL EXCEPTION: main 
Process: in.wptrafficanalyzer.achartenginepiechart, PID: 12831 
java.lang.NullPointerException 
    at android.view.ViewConfiguration.get(ViewConfiguration.java:325) 
    at android.view.View.<init>(View.java:3483) 
    at org.achartengine.GraphicalView.<init>(GraphicalView.java:89) 
    at org.achartengine.ChartFactory.getPieChartView(ChartFactory.java:226) 
    at in.wptrafficanalyzer.achartenginepiechart.Popup_animation11$TransparentProgressDialog$1.onAnimationEnd(Popup_animation11.java:156) 
    at android.view.animation.Animation$3.run(Animation.java:374) 
    at android.os.Handler.handleCallback(Handler.java:808) 
    at android.os.Handler.dispatchMessage(Handler.java:103) 
    at android.os.Looper.loop(Looper.java:193) 
    at android.app.ActivityThread.main(ActivityThread.java:5324) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
    at dalvik.system.NativeStart.main(Native Method) 
+0

Popup_animation11中的行号是多少? – 2015-02-05 12:36:51

+0

layout =(LinearLayout)popupView.findViewById(R.id.chart); – 2015-02-05 12:43:52

回答

0

问题是在这里:

mChartView = ChartFactory.getPieChartView(ctx, mSeries, mRenderer); 

因为ctxnull。在传递给getPieChartView方法之前初始化ctx。您可以在onCreate方法中执行此操作:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.popup_main); 
    ctx=Popup_animation11.this;<<<<< initialize here 
    ...... 
相关问题