如何设置ImageButton按键按下去后的 特效----(如类似风车旋转的动画特效)

android默认的Imagebutton按下去之后没有一点变化,实在让人受不了。这次在重新写摄像头相关的demo时,特意学习了这方面的内容。

第一种方法:

前文http://blog.csdn.net/yanzi1225627/article/details/7814392这是一种思路,可以用美图秀秀将同一个图片做成不同的灰度/色调效果,保存成同样大小的图片,然后利用http://blog.csdn.net/yanzi1225627/article/details/7814392这里设置成点击显示不同色调灰度的同一副图片。

第二种方法:

还是同样的思路,只不过不是在xml文件里,而是在java程序里更改点击显示不同图片,如下:

imageButton.setOnTouchListener(new OnTouchListener(){    

       @Override   

       public boolean onTouch(View v, MotionEvent event) {    

              if(event.getAction() == MotionEvent.ACTION_DOWN){    

                   //更改为按下时的背景图片    

                   v.setBackgroundResource(R.drawable.pressed);    

               }else if(event.getAction() == MotionEvent.ACTION_UP){    

                 //改为抬起时的图片    

    v.setBackgroundResource(R.drawable.released);    

               }    

              return false;    

       }    

 });

第三种方法:

这也是我采用的方法。前两种方法在按键多的情况下用起来很不方便,当然不排除个别情况下就需要显示不同的图片。这里用颜色矩阵的方法,只需一张照片,就可以实现效果。且这个效果可以往任何一个ImageButton上绑定。代码如下:

/*为了使图片按钮按下和弹起状态不同,采用过滤颜色的方法.按下的时候让图片颜色变淡*/
	public class MyOnTouchListener implements OnTouchListener{

		public final  float[] BT_SELECTED=new float[]
				{ 2, 0, 0, 0, 2,
			0, 2, 0, 0, 2,
			0, 0, 2, 0, 2,
			0, 0, 0, 1, 0 };			    

		public final float[] BT_NOT_SELECTED=new float[]
				{ 1, 0, 0, 0, 0,
			0, 1, 0, 0, 0,
			0, 0, 1, 0, 0,
			0, 0, 0, 1, 0 };
		public boolean onTouch(View v, MotionEvent event) {
			// TODO Auto-generated method stub
			if(event.getAction() == MotionEvent.ACTION_DOWN){
				v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));
				v.setBackgroundDrawable(v.getBackground());
			}
			else if(event.getAction() == MotionEvent.ACTION_UP){
				v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));
				v.setBackgroundDrawable(v.getBackground());
				
			}
			return false;
		}

	}

可以用我http://blog.csdn.net/yanzi1225627/article/details/8577756这里的图片测试下,ImageButton按下后会有类似风车旋转的动画特效。

核心参考:

http://blog.sina.com.cn/s/blog_972ddc1b010113df.html
http://www.cnblogs.com/xiaowenji/archive/2011/02/04/1949165.html
http://blog.csdn.net/sytzz/article/details/5673662



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用`ViewPager2`和`PageTransformer`来实现这个效果。 首先,在您的布局文件中添加一个`ViewPager2`和一个`ImageButton`,并将它们放在一个父容器中。例如: ```xml <RelativeLayout android:id="@+id/parent_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.viewpager2.widget.ViewPager2 android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> <ImageButton android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_arrow_forward" /> </RelativeLayout> ``` 然后,创建一个`PageTransformer`的实现类,用于定义页面的动画效果。例如: ```java public class FlipPageTransformer implements ViewPager2.PageTransformer { private static final float MIN_SCALE = 0.75f; @Override public void transformPage(@NonNull View view, float position) { if (position <= 0f) { view.setTranslationX(0f); view.setScaleX(1f); view.setScaleY(1f); } else if (position <= 1f) { view.setTranslationX(-view.getWidth() * position); view.setPivotY(0.5f * view.getHeight()); view.setPivotX(0.5f * view.getWidth()); float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } } } ``` 这个类的`transformPage()`方法将在每个页面滚动时调用,`position`参数表示页面的偏移量。在这个方法中,我们使用`View`的`setTranslationX()`方法来设置页面的水平偏移量,`setPivotX()`和`setPivotY()`方法来设置页面的旋转中心点,以及`setScaleX()`和`setScaleY()`方法来设置页面的缩放比例。这样就可以实现一个类似翻页的动画效果。 最后,在您的活动代码中,获取`ViewPager2`和`ImageButton`的引用并设置适配器和页面变换器。例如: ```java ViewPager2 viewPager = findViewById(R.id.view_pager); ImageButton nextButton = findViewById(R.id.next_button); viewPager.setAdapter(new MyPagerAdapter()); viewPager.setPageTransformer(new FlipPageTransformer()); nextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager.setCurrentItem(viewPager.getCurrentItem() + 1, true); } }); ``` 在这个示例中,`MyPagerAdapter`是您自己实现的适配器类,用于提供页面视图。`nextButton`是您的`ImageButton`,当它被点击时,我们调用`setCurrentItem()`方法来滚动到下一页。最后,我们调用`setPageTransformer()`方法来设置页面变换器,这样就可以为每个页面设置动画效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值