Sachverhalt: A. Der 1955 geborene C._ bezog ab 1. Mai 1998 eine halbe Rente und ab 1. Juli 2000 eine ganze Rente der Invalidenversicherung (Verfügungen vom 26. Mai 1999 und 14. Februar 2001). Im Februar 2005 leitete die IV-Stelle des Kantons Zürich von Amtes wegen ein Revisionsverfahren ein. Mit Verfügung vom 7. April 2005 hob sie die ganze Rente auf Ende Mai 2005 auf. Dagegen liess C._ Einsprache erheben. In der Folge nahm die IV-Stelle weitere Abklärungen vor. Unter anderem holte sie beim Spital Z._ einen gastroenterologischen Bericht ein und liess den Versicherten im Abklärungszentrum R._ interdisziplinär begutachten. Mit Einspracheentscheid vom 18. Januar 2007 sprach die IV-Stelle C._ eine Viertelsrente ab 1. Juni 2005 zu. B. Die Beschwerde des C._ wies das Sozialversicherungsgericht des Kantons Zürich nach zweifachem Schriftenwechsel mit Entscheid vom 28. April 2008 ab. C. C._ lässt Beschwerde in öffentlich-rechtlichen Angelegenheiten führen mit dem Rechtsbegehren, Gerichtsentscheid und Einspracheentscheid seien aufzuheben und ihm auch ab 1. Juni 2005 weiterhin eine ganze, allenfalls eine Dreiviertelsrente auszurichten, eventualiter die Sache zu neuer Beurteilung an die Vorinstanz oder zur Vornahme weiterer Abklärungen an die IV-Stelle zurückzuweisen. Die IV-Stelle beantragt die Abweisung der Beschwerde. Kantonales Gericht und Bundesamt für Sozialversicherungen verzichten auf eine Vernehmlassung.