我使用以下代码在片段的弹出窗口中创建饼图。
mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer);
popupWindow = new PopupWindow(mChartView, LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT, false);
popupWindow.setOutsideTouchable(true);
popupWindow.showAsDropDown(mChartView, 50, 50);
popupWindow.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
popupWindow.dismiss();
}
return false;
}
});
这是我的完整代码。
public class MainActivity extends SherlockFragmentActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
private Boolean is3g, isWifi;
private int networkType;
private TelephonyManager telephonyInfo;
static Integer[] pics = { R.drawable.route, R.drawable.two,
R.drawable.three, R.drawable.four };
static ImageAdapter imgAdp;
private static PopupWindow popupWindow = null;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
@Override
public void onBackPressed() {
if(popupWindow != null) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.banner, menu);
return true;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgAdp = new ImageAdapter(MainActivity.this);
mSectionsPagerAdapter = new SectionsPagerAdapter(
getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
// network connection manager
ConnectivityManager manager = (ConnectivityManager) getSystemService(LoginActivity.CONNECTIVITY_SERVICE);
is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.isConnectedOrConnecting();
isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
.isConnectedOrConnecting();
telephonyInfo = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
networkType = telephonyInfo.getNetworkType();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_accept:
Intent sales = new Intent(getApplicationContext(),
SalesRouteFragment.class);
Intent showContent = new Intent(getApplicationContext(),
DownloadUploadPagerActivity.class);
Bundle bundle = new Bundle();
bundle.putString("name", "MainActivity");
if (is3g || isWifi) {
Toast.makeText(MainActivity.this, "WIFI/3G is availabe ",
Toast.LENGTH_LONG).show();
showContent.putExtras(bundle);
startActivity(showContent);
finish();
return true;
} else if (networkType == TelephonyManager.NETWORK_TYPE_GPRS) {
Toast.makeText(MainActivity.this, "GPRS is availabe ",
Toast.LENGTH_LONG).show();
showContent.putExtras(bundle);
startActivity(showContent);
finish();
return true;
} else {
Toast.makeText(MainActivity.this,
"There is no internet connectivity", Toast.LENGTH_LONG)
.show();
sales.putExtras(bundle);
startActivity(sales);
finish();
return true;
}
case R.id.ac_exit:
AlertDialog.Builder exitCon = new AlertDialog.Builder(
MainActivity.this);
exitCon.setMessage("Do you want to Exit? ");
exitCon.setCancelable(false);
exitCon.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
try {
removePrefrence();
Intent exit = new Intent(MainActivity.this,
LoginActivity.class);
Bundle bdle = new Bundle();
bdle.putString("name", "LoginActivity");
exit.putExtras(bdle);
startActivity(exit);
finish();
} catch (Exception e) {
e.printStackTrace();
}
}
});
exitCon.setNegativeButton("No",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
exitCon.setTitle("Exit...");
exitCon.show();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
// Exit
public void removePrefrence() {
SharedPreferences myLogPrefs = MainActivity.this.getSharedPreferences(
"myLogedPrefs", MODE_PRIVATE);
SharedPreferences myRoutes = MainActivity.this.getSharedPreferences(
"myRoute", MODE_PRIVATE);
Date date = new Date();
DateFormat dateOnlyFormatter = new SimpleDateFormat("yyyy-MM-dd");
String strDateOnly = dateOnlyFormatter.format(date);
String loggedDate = myLogPrefs.getString("LoggedDate", "");
if (loggedDate.equals(strDateOnly)) {
} else {
SharedPreferences.Editor prefsEditor = myLogPrefs.edit();
myLogPrefs.getAll();
prefsEditor.remove("myLogedPrefs");
prefsEditor.clear();
prefsEditor.commit();
SharedPreferences.Editor routePrefence = myRoutes.edit();
myRoutes.getAll();
routePrefence.remove("myRoute");
routePrefence.clear();
routePrefence.commit();
}
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
}
return null;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
Fragment fragment = new DummySectionFragment();
Bundle args = new Bundle();
args.putInt(DummySectionFragment.ARG_SECTION_NUMBER,
position + 1);
fragment.setArguments(args);
return fragment;
case 1:
Fragment fment1 = new DummySectionFragment();
Bundle args1 = new Bundle();
args1.putInt(DummySectionFragment.ARG_SECTION_NUMBER,
position + 1);
fment1.setArguments(args1);
return fment1;
case 2:
case 3:
default:
Fragment fment = new DummySectionFragment();
Bundle ars = new Bundle();
ars.putInt(DummySectionFragment.ARG_SECTION_NUMBER,
position + 1);
fment.setArguments(ars);
return fment;
}
}
@Override
public int getCount() {
return 2;
}
}
public static class LaunchpadSectionFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = null;
Intent intent = new Intent(getActivity(), SalesRouteFragment.class);
startActivity(intent);
return rootView;
}
}
public static class DummySectionFragment extends Fragment {
public static final String ARG_SECTION_NUMBER = "section_number";
private String strBusinessUnit, strExeCode;
private Date date = new Date();
private DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
private String sysDate = dateFormatter.format(date);
private ArrayList<XAPeriodEndDate> currentPerid_Yr = new ArrayList<XAPeriodEndDate>();
private int currentYear;
private int currentPeriod;
private TextView tvAsAt, tvTarget, tvAchieved, tvBalAchieve, tvBalDays,
tvPlanedRoute, tvOutlet, tvTargetVal;
private Button btnpieChart;
private ProgressBar progressBar;
private ArrayList<WMTargetExecAchieveSummary> lstExeSummaryData;
private DecimalFormat deciFormatter = new DecimalFormat("#.00");
private double target, bal_toAchieve, achieved, pertageAchieved,
dayTargetVal;
private String strStartDate, strEndDate;
private int balDays = 1, outletCount = 0;
private TreeMap<String, String> todayRouteMap = new TreeMap<String, String>();
private String todayRouteCode;
private HashMap<String, Double> chartDataMap = new HashMap<String, Double>();
private ArrayList<String> lstBrandNames = new ArrayList<String>();
private ArrayList<Double> lstAchievedVals = new ArrayList<Double>();
private GraphicalView mChartView = null;
private LinearLayout chart_container;
private View rootView = null;
public DummySectionFragment() {
}
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//View rootView = null;
if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) {
rootView = inflater.inflate(R.layout.fragment_main_dummy,
container, false);
tvAsAt = (TextView) rootView.findViewById(R.id.tvAsAt);
tvAchieved = (TextView) rootView.findViewById(R.id.tvAchieved);
tvBalAchieve = (TextView) rootView.findViewById(R.id.tvBalAchieve);
tvBalDays = (TextView) rootView.findViewById(R.id.tvBalDays);
tvOutlet = (TextView) rootView.findViewById(R.id.tvOutlet);
tvPlanedRoute = (TextView) rootView.findViewById(R.id.tvPlanedRoute);
tvTarget = (TextView) rootView.findViewById(R.id.tvTarget);
tvTargetVal = (TextView) rootView.findViewById(R.id.tvTargetVal);
btnpieChart = (Button) rootView.findViewById(R.id.btnpieChart);
progressBar = (ProgressBar) rootView.findViewById(R.id.progressBar);
btnpieChart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SelectDBAdapter selectDBAdapter = SelectDBAdapter
.getDBAdapterInstance(getActivity());
try {
selectDBAdapter.openDataBase();
chartDataMap = selectDBAdapter
.getPieChartData(strBusinessUnit,
currentPeriod, currentYear);
} catch (Exception e) {
selectDBAdapter.close();
e.printStackTrace();
} finally {
selectDBAdapter.close();
}
System.out.println("chartDataMap === "+ chartDataMap);
if (chartDataMap.size() > 0) {
for (Map.Entry<String, Double> entry : chartDataMap.entrySet()) {
lstBrandNames.add(entry.getKey());
lstAchievedVals.add(entry.getValue());
}
ArrayList<Double> distribution = calc_Percentage(lstAchievedVals);
System.out.println("distribution === " + distribution);
lstBrandNames = set_lables(lstBrandNames, distribution);
CategorySeries distributionSeries = new CategorySeries(
"Brands - Achievement Progress");
for (int i = 0; i < distribution.size(); i++) {
distributionSeries.add(lstBrandNames.get(i), distribution.get(i));
}
DefaultRenderer defaultRenderer = new DefaultRenderer();
defaultRenderer.setApplyBackgroundColor(true);
defaultRenderer.setBackgroundColor(Color.WHITE);
defaultRenderer.setLabelsTextSize(25);
//defaultRenderer.setPanEnabled(true, false);
for (int i = 0; i < distribution.size(); i++) {
SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
Random rnd = new Random();
int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
seriesRenderer.setColor(color);
seriesRenderer.setGradientEnabled(false);
seriesRenderer.setDisplayChartValues(true);
seriesRenderer.setShowLegendItem(false);
defaultRenderer.addSeriesRenderer(seriesRenderer);
}
defaultRenderer.setLabelsColor(Color.BLACK);
defaultRenderer.setChartTitle("Brands - Achievement Progress");
defaultRenderer.setChartTitleTextSize(30);
defaultRenderer.setZoomButtonsVisible(true);
defaultRenderer.setShowLabels(true);
if (mChartView == null) {
mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer);
} else {
mChartView.repaint();
}
//mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer);
//LayoutInflater layoutInflater = null;
//View popupView = layoutInflater.inflate(R.layout.popup, null);
//View popupView = inflater.inflate(R.layout.pie_chart, null);
popupWindow = new PopupWindow(mChartView, LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, false);
popupWindow.setOutsideTouchable(true);
popupWindow.showAsDropDown(mChartView, 50, 50);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
popupWindow.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == MotionEvent.ACTION_OUTSIDE && event.getAction()==KeyEvent.KEYCODE_BACK) {
popupWindow.dismiss();
}
return false;
}
});
//popupWindow.showAtLocation(mChartView, Gravity.CENTER, 10, 10);
//popupWindow.update();
/*FragmentTransaction ft = getFragmentManager().beginTransaction();
//mChartView.setId(1000);
ft.replace(, new DummySectionFragment(), "NewFragmentTag");
ft.addToBackStack(null);
ft.commit();*/
//chart_container = new LinearLayout(getActivity());
//chart_container.setId(1);
//LinearLayout chartContainer = (LinearLayout) rootView.findViewById(
// R.id.chart_container);
//rootView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer);
//chart_container.removeAllViews();
//chart_container.addView(mChartView);
/*ft.replace(rootView.getId(), new DummySectionFragment(), "NewFragmentTag");
//getActivity().setContentView(chart_container);
ft.addToBackStack(null);
ft.commit();*/
/*Intent intent = ChartFactory.getPieChartIntent(
getActivity(), distributionSeries,
defaultRenderer, "Dash Board");*/
//layout = new LinearLayout(getActivity());
//mChartView = ChartFactory.getPieChartView(getActivity(), distributionSeries, defaultRenderer);
/*Intent intent = ChartFactory.getPieChartIntent(
getActivity(), distributionSeries,
defaultRenderer, "Dash Board");*/
//getActivity().startActivity(intent);
/*layout.removeAllViews(); //This remove previous graph
layout.addView(mChartView); //This loads the graph again
layout.bringToFront();
getActivity().setContentView(layout);*/
}
}
});
} else if (getArguments().getInt(ARG_SECTION_NUMBER) == 2) {
rootView = inflater.inflate(R.layout.dashboard_vedio,
container, false);
VideoView videoView = (VideoView) rootView
.findViewById(R.id.videoView1);
MediaController mcontroller = new MediaController(
rootView.getContext());
mcontroller.setAnchorView(mcontroller);
String url = Environment.getExternalStorageDirectory()
+ "/XONT/BabyCheramy.mp4";
Uri video = Uri.parse(url);
videoView.setVideoURI(video);
videoView.setMediaController(mcontroller);
} else {
rootView = inflater.inflate(R.layout.fragment_main_dummy,
container, false);
}
return rootView;
}
}
public static ArrayList<Double> calc_Percentage(ArrayList<Double> list) {
ArrayList<Double> lstPercentage = new ArrayList<Double>();
double total = 0;
double precentage;
for (int i = 0; i < list.size(); i++) {
total = total + list.get(i);
}
System.out.println(total);
for (int j = 0; j < list.size(); j++) {
precentage = (list.get(j) / total) * 100;
lstPercentage.add(precentage);
}
return lstPercentage;
}
public static ArrayList<String> set_lables(ArrayList<String> lstBrandNames, ArrayList<Double> distribution) {
String G_lable;
DecimalFormat df = new DecimalFormat("#.00");
ArrayList<String> lstLabels = new ArrayList<String>();
for (int i = 0; i < lstBrandNames.size(); i++) {
G_lable = lstBrandNames.get(i) + " : " + df.format(distribution.get(i)) + "%";
lstLabels.add(G_lable);
}
return lstLabels;
}
public class ImageAdapter extends BaseAdapter {
private Context ctx;
int imageBackground;
public ImageAdapter(Context c) {
ctx = c;
TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
imageBackground = ta.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 1);
ta.recycle();
}
@Override
public int getCount() {
return pics.length;
}
@Override
public Object getItem(int arg0) {
return arg0;
}
@Override
public long getItemId(int arg0) {
return arg0;
}
public View getView(int arg0, View arg1, ViewGroup arg2) {
ImageView iv = new ImageView(ctx);
iv.setImageResource(pics[arg0]);
iv.setScaleType(ImageView.ScaleType.FIT_XY);
iv.setLayoutParams(new Gallery.LayoutParams(150, 120));
iv.setBackgroundResource(imageBackground);
return iv;
}
}
}
这是我的新代码。
private static boolean isChart = false;
popupWindow = new PopupWindow(mChartView, LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, false);
popupWindow.setOutsideTouchable(true);
popupWindow.showAsDropDown(mChartView, 50, 50);
isChart = true;
@Override
public void onBackPressed() {
System.out.println("BACKED");
if(isChart) {
popupWindow.dismiss();
} else {
super.onBackPressed();
}
//return;
}
显示图表。但是当我按下android中的后退按钮时,它不会从饼图窗口返回。我该如何解决这个问题? 任何建议都非常感谢。
提前完成
答案 0 :(得分:2)
您需要添加以下内容:
popupWindow.setBackgroundDrawable(new BitmapDrawable());
创建弹出窗口时,否则由于未设置背景可绘制,它不会对任何触摸事件做出反应。
答案 1 :(得分:0)
您的活动应覆盖
@Override
public void onBackPressed() {
}
在其中,您应该检查弹出窗口是否可见,如果是,您应该将其关闭
定义bool _isVisible = false; // in class level
设置_isVisible = true; // on popup.show
内
onbackpressed()
if(_isVisible)
popup.dismiss();
@Override
public void onBackPressed() {
if(popupWindow != null) // dont check this if, put a bool value instead of this
{
popupWindow.dismiss();
} else {
super.onBackPressed();
}
}