android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)

这一系列博文都是:(android高仿系列)今日头条 --新闻阅读器 (一)

开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能DEMO,所以就放出来这么一个DEMO。

原本觉得是最后完成后发网站客户端的,可是这样体现不出一个功能一个功能的分析实现效果,而且周期时间长,所以就完成一部分,发一部分,敬请谅解。


下面的菜单弹出效果在很多的新闻阅读器上都有,比如今日头条、360新闻等。下

其实这个实现起来很简单,看其效果,其实就是一个PopupWindow,之后设定相应postion的按钮点击属性,之后获取按钮的位置,给它设置动画显示消失就可以出现了。

下面看看代码的思路:

由于整体是一个LISTVIEW,所以我把点击的事件写到了对应的Adapter适配器中。

public class MyAdapter extends BaseAdapter {
	LayoutInflater inflater = null;
	Activity activity;
	ArrayList<News> newslist;
	private PopupWindow popupWindow;

	public MyAdapter(Activity activity, ArrayList<News> newslist) {
		this.activity = activity;
		this.newslist = newslist;
		inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		initPopWindow();
	}

	@Override
	public int getCount() {
		return newslist != null ? newslist.size() : 0;
	}

	@Override
	public News getItem(int position) {
		if (newslist != null && newslist.size() != 0) {
			return newslist.get(position);
		}
		return null;
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		View vi = convertView;
		final ViewHolder holder;
		if (vi == null) {
			vi = inflater.inflate(R.layout.listview_item, null);
			holder = new ViewHolder();
			holder.item_title = (TextView) vi.findViewById(R.id.item_title);
			holder.item_content = (TextView) vi.findViewById(R.id.item_content);
			holder.button_showpop = (ImageView) vi.findViewById(R.id.button_showpop);
			vi.setTag(holder);
		} else {
			holder = (ViewHolder) vi.getTag();
		}
		News news = getItem(position);
		holder.item_title.setText(news.getTitle());
		holder.item_content.setText(news.getContent());
		holder.button_showpop .setOnClickListener(new popAction(position));
		return vi;
	}

	public class ViewHolder {
		TextView item_title;
		TextView item_content;
		ImageView button_showpop;
	}
	
	/** 
	 * 初始化popWindow
	 * */
	private void initPopWindow() {
		View popView = inflater.inflate(R.layout.listview_pop, null);
		popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		popupWindow.setBackgroundDrawable(new ColorDrawable(0));
		//设置popwindow出现和消失动画
		popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
		btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close);
	}
	
	/** popWindow 关闭按钮 */
	private ImageView btn_pop_close;
	
	/** 
	 * 显示popWindow
	 * */
	public void showPop(View parent, int x, int y,int postion) {
		//设置popwindow显示位置
		popupWindow.showAtLocation(parent, 0, x, y);
		//获取popwindow焦点
		popupWindow.setFocusable(true);
		//设置popwindow如果点击外面区域,便关闭。
		popupWindow.setOutsideTouchable(true);
		popupWindow.update();
		if (popupWindow.isShowing()) {
			
		}
		btn_pop_close.setOnClickListener(new OnClickListener() {
			public void onClick(View paramView) {
				popupWindow.dismiss();
			}
		});
	}
	
	/** 
	 * 每个ITEM中more按钮对应的点击动作
	 * */
	public class popAction implements OnClickListener{
		int position;
		public popAction(int position){
			this.position = position;
		}
		@Override
		public void onClick(View v) {
			int[] arrayOfInt = new int[2];
			//获取点击按钮的坐标
			v.getLocationOnScreen(arrayOfInt);
	        int x = arrayOfInt[0];
	        int y = arrayOfInt[1];
	        showPop(v, x , y, position);
		}
	}
}
就这么多的内容,很简单,日后碰到这类相关的效果,也就不用怕了。

下面是我经过上述代码实现的效果:



下面放上该效果源码DEMO的下载地址:下载地址


高仿今日头条(二)预计明天发布,大致已经是个整体客户端了,有的功能还没实现还在进一步完善,比如说新闻类别选择那边,拖动效果还未实现,目前只实现了点击效果,所以还在慢慢摸索阶段。

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: Android Studio电子书阅读器App源码包是一个提供电子书阅读功能的应用程序的源代码包。该源码包包括了开发该应用所需的各种资源和代码文件。 App源码包通常包括以下内容: 1. 主要的Java源代码文件:这些源代码负责实现应用程序的各种功能,例如电子书的展示,翻页功能等。 2. 布局文件:这些XML文件描述了应用程序的UI界面,包括电子书显示界面和用户交互界面。 3. 图片资源文件:这些文件包含应用程序中使用到的各种图片素材,例如封面图、背景图等。 4. 字体资源文件:这些文件包含应用程序使用到的各种字体资源,用于显示电子书中的文字内容。 5. 数据文件:这些文件包含了电子书的内容,可以是文本文件、PDF文件等。 6. 其他辅助文件:如Manifest文件、Gradle构建文件等。 使用该源码包,开发者可以快速地搭建一个电子书阅读器应用,并根据自己的需求进行定制和扩展。通过阅读源码,可以学习到如何实现电子书的展示、翻页、书签功能等。开发者还可以在该源码的基础上进行二次开发,添加自己的创新功能,使得该应用更具个性化。 总之,Android Studio电子书阅读器App源码包提供了一个起点,帮助开发者快速搭建自己的电子书阅读器应用,为用户提供良好的阅读体验。 ### 回答2: Android Studio是一种广泛使用的集成开发环境(IDE),用于开发Android应用程序。在使用Android Studio进行开发时,我们可以使用现成的源码包作为起点,包括电子书阅读器应用程序。 电子书阅读器是一种非常常见的应用程序,在智能手机和平板电脑上广泛使用。这种应用程序允许用户在设备上阅读电子书和其他相关文档。现有的电子书阅读器应用程序源码包可以提供一些基本功能,如打开和显示电子书、翻页、书签管理等。 使用Android Studio的电子书阅读器源码包作为起点,开发人员可以从这些基本功能开始扩展和定制应用程序。他们可以添加更多的功能,如搜索、字体调整、夜间模式等,以提供更好的用户体验。定制化的电子书阅读器应用程序可以根据用户的需求进行定制,从而满足不同用户的阅读偏好。 开发人员可以通过分析源码包中的代码,了解电子书阅读器应用程序的架构和设计。他们可以学习如何使用Android Studio进行布局设计、页面导航和数据管理。通过使用现成的源码包作为起点,开发人员可以加快应用程序的开发进程,并且有机会学习和应用最佳的Android开发实践。 总的来说,Android Studio电子书阅读器应用程序源码包可以为开发人员提供一个起点,帮助他们更快地开发出满足用户需求的定制化电子书阅读器应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值