【Android技巧】ImageButton 去边框 & 添加按下效果

·  为ImageButton添加图片后,有边框,看起来像是图片贴在了一个按扭上面,要多丑有多丑。 
   解决办法:网上查了一下有两种,我采用的是设置其背景为透明:android:background="#00ffffff"
·  图片全部弄好,添加好以后,点击按扭木有按下效果。这个问题搞得我头大了。网上找了很多方法,一个一个的试过,都不是很满意。以下是网上比较流行的方法: 
·通过代码实现,切换背景图片。 
·通过XML实现,也是切换背景图片。 
·颜色过滤。不用切换背景图片,一段代码,通通搞定。 
·原文:< http://blog.csdn.net/sytzz/archive/2010/06/16/5673662.aspx
    前面两种虽然好用,但是显然不可取啊,像作者说的一样,每个按扭都写一段代码或者XML,并且每个按扭都要配两张图片。那不得搞死人啊。
    于是我试着使用第三种方法,但是一点效果也木有啊。现在也不知道是为神马。目前我认为可能是我把背景设为透明的原因。
    然后又试着通过类似颜色过滤的方法,在代码中设置背景的透明度。也是一点效果也木有。身为菜鸟我表示,不知道是什么情况,且压力很大。

     最终,算是找到了一个可以接受的效果:设置图片的透明度。

imgButton.setOnTouchListener(new View.OnTouchListener() {             
             @Override
             public boolean onTouch(View v, MotionEvent event) {
                 if(event.getAction()==MotionEvent.ACTION_DOWN){
                     imgButton.getDrawable().setAlpha(150);//设置图片透明度0~255,0完全透明,255不透明
                      imgButton.invalidate();
                 }
                 else {
                     imgButton.getDrawable().setAlpha(255);//还原图片
                      imgButton.invalidate();
                 }
                 return false;
             }
         });
好了,现在点击按扭总算是有点反应了。
注意:
·ImageButton背景设为透明 
·第7行和第11行的invalidate()方法调用(重绘一下按钮,不然还是木有反应,为了这个我还想了半天,最后终于想到重绘,谢天谢地...) 
·具体使用的时候不用每个按扭都写一个Listener,直接把这个匿名的Listener给个名字。然后每个ImageButton都设成这个Listener就可以了。 
·搞定,收工。

  • 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、付费专栏及课程。

余额充值