如何在投掷时为片段内的文本视图设置不透明度?
How to set opacity for a textview inside a fragment while fling?
如何为片段内的文本视图赋予不透明度?
最初我有一个水平的圆形 ViewPager,当聚焦到屏幕和离开屏幕时,我的片段中的 TextView 应该分别淡入和淡出。
我用 onTouchListener 做了一些实验,但我没有得到任何结果。我也尝试设置一个硬编码的 alpha 值,但它没有按预期工作。
float prev = 0;
@Override
public void getPositionValue(float x1,float x2){
AppUtils.alphaCalculator(x2,prev,deviceWidth);
prev = x2;
int index = viewPager.getCurrentItem();
CustomViewPagerAdapter customViewPagerAdapter = (CustomViewPagerAdapter) viewPagerAdapter;
ImageSliderFragment fragment = customViewPagerAdapter.getFragment(index);
fragment.getView().findViewById(R.id.head_data).setAlpha(50);
fragment.getView().findViewById(R.id.head_data).invalidate();
ImageSliderFragment fragment2 = customViewPagerAdapter.getFragment(index+1);
fragment2.getView().findViewById(R.id.head_data).setAlpha(50);
fragment2.getView().findViewById(R.id.head_data).invalidate();
}
任何人都可以提供一些关于如何实现此目标的想法...
根据 kartheek 的说法,我可以得到 partial,下面是我的代码
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.findViewById(R.id.head_data).setAlpha(0.10f);
} else if (position <= 1) { // [-1,1]
if(position<0.1f){
view.findViewById(R.id.head_data).setAlpha(1.0f);
}else if(position<0.2f && position>0.1f){
view.findViewById(R.id.head_data).setAlpha(0.68f);
}else if(position<0.3f && position>0.2f){
view.findViewById(R.id.head_data).setAlpha(0.55f);
}else if(position<0.4f && position>0.3f){
view.findViewById(R.id.head_data).setAlpha(0.45f);
}else if(position<0.5f && position>0.4f){
view.findViewById(R.id.head_data).setAlpha(0.38f);
}else if(position<0.6f && position>0.5f){
view.findViewById(R.id.head_data).setAlpha(0.30f);
}else if(position<0.7f && position>0.6f){
view.findViewById(R.id.head_data).setAlpha(0.22f);
}else if(position<0.8f && position>0.7f){
view.findViewById(R.id.head_data).setAlpha(0.15f);
}else if(position<0.9f && position>0.8f){
view.findViewById(R.id.head_data).setAlpha(0.10f);
}else if(position<1.0f && position>0.9f){
view.findViewById(R.id.head_data).setAlpha(0.05f);
}
if(position<-0.1f){
view.findViewById(R.id.head_data).setAlpha(1.0f);
}else if(position<-0.2f && position>-0.1f){
view.findViewById(R.id.head_data).setAlpha(0.68f);
}else if(position<-0.3f && position>-0.2f){
view.findViewById(R.id.head_data).setAlpha(0.55f);
}else if(position<-0.4f && position>-0.3f){
view.findViewById(R.id.head_data).setAlpha(0.45f);
}else if(position<-0.5f && position>-0.4f){
view.findViewById(R.id.head_data).setAlpha(0.38f);
}else if(position<-0.6f && position>-0.5f){
view.findViewById(R.id.head_data).setAlpha(0.30f);
}else if(position<-0.7f && position>-0.6f){
view.findViewById(R.id.head_data).setAlpha(0.22f);
}else if(position<-0.8f && position>-0.7f){
view.findViewById(R.id.head_data).setAlpha(0.15f);
}else if(position<-0.9f && position>-0.8f){
view.findViewById(R.id.head_data).setAlpha(0.10f);
}else if(position<-1.0f && position>-0.9f){
view.findViewById(R.id.head_data).setAlpha(0.05f);
}
} else { // (1,+Infinity]
// This page is way off-screen to the right
view.findViewById(R.id.head_data).setAlpha(0.10f);
}
图像从右到左对焦正常。
但两种方式都不行
可以通过ViewPager.PageTransformer
实现,在ViewPager
滑动fragments
时会回调。这是一个小例子
public class SimplePageTransformer implements ViewPager.PageTransformer {
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
} else if (position <= 1) { // [-1,1]
} else { // (1,+Infinity]
// This page is way off-screen to the right
}
}
}
你可以从这个link中找到一个detail example。
如何为片段内的文本视图赋予不透明度?
最初我有一个水平的圆形 ViewPager,当聚焦到屏幕和离开屏幕时,我的片段中的 TextView 应该分别淡入和淡出。
我用 onTouchListener 做了一些实验,但我没有得到任何结果。我也尝试设置一个硬编码的 alpha 值,但它没有按预期工作。
float prev = 0;
@Override
public void getPositionValue(float x1,float x2){
AppUtils.alphaCalculator(x2,prev,deviceWidth);
prev = x2;
int index = viewPager.getCurrentItem();
CustomViewPagerAdapter customViewPagerAdapter = (CustomViewPagerAdapter) viewPagerAdapter;
ImageSliderFragment fragment = customViewPagerAdapter.getFragment(index);
fragment.getView().findViewById(R.id.head_data).setAlpha(50);
fragment.getView().findViewById(R.id.head_data).invalidate();
ImageSliderFragment fragment2 = customViewPagerAdapter.getFragment(index+1);
fragment2.getView().findViewById(R.id.head_data).setAlpha(50);
fragment2.getView().findViewById(R.id.head_data).invalidate();
}
任何人都可以提供一些关于如何实现此目标的想法...
根据 kartheek 的说法,我可以得到 partial,下面是我的代码
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
view.findViewById(R.id.head_data).setAlpha(0.10f);
} else if (position <= 1) { // [-1,1]
if(position<0.1f){
view.findViewById(R.id.head_data).setAlpha(1.0f);
}else if(position<0.2f && position>0.1f){
view.findViewById(R.id.head_data).setAlpha(0.68f);
}else if(position<0.3f && position>0.2f){
view.findViewById(R.id.head_data).setAlpha(0.55f);
}else if(position<0.4f && position>0.3f){
view.findViewById(R.id.head_data).setAlpha(0.45f);
}else if(position<0.5f && position>0.4f){
view.findViewById(R.id.head_data).setAlpha(0.38f);
}else if(position<0.6f && position>0.5f){
view.findViewById(R.id.head_data).setAlpha(0.30f);
}else if(position<0.7f && position>0.6f){
view.findViewById(R.id.head_data).setAlpha(0.22f);
}else if(position<0.8f && position>0.7f){
view.findViewById(R.id.head_data).setAlpha(0.15f);
}else if(position<0.9f && position>0.8f){
view.findViewById(R.id.head_data).setAlpha(0.10f);
}else if(position<1.0f && position>0.9f){
view.findViewById(R.id.head_data).setAlpha(0.05f);
}
if(position<-0.1f){
view.findViewById(R.id.head_data).setAlpha(1.0f);
}else if(position<-0.2f && position>-0.1f){
view.findViewById(R.id.head_data).setAlpha(0.68f);
}else if(position<-0.3f && position>-0.2f){
view.findViewById(R.id.head_data).setAlpha(0.55f);
}else if(position<-0.4f && position>-0.3f){
view.findViewById(R.id.head_data).setAlpha(0.45f);
}else if(position<-0.5f && position>-0.4f){
view.findViewById(R.id.head_data).setAlpha(0.38f);
}else if(position<-0.6f && position>-0.5f){
view.findViewById(R.id.head_data).setAlpha(0.30f);
}else if(position<-0.7f && position>-0.6f){
view.findViewById(R.id.head_data).setAlpha(0.22f);
}else if(position<-0.8f && position>-0.7f){
view.findViewById(R.id.head_data).setAlpha(0.15f);
}else if(position<-0.9f && position>-0.8f){
view.findViewById(R.id.head_data).setAlpha(0.10f);
}else if(position<-1.0f && position>-0.9f){
view.findViewById(R.id.head_data).setAlpha(0.05f);
}
} else { // (1,+Infinity]
// This page is way off-screen to the right
view.findViewById(R.id.head_data).setAlpha(0.10f);
}
图像从右到左对焦正常。
但两种方式都不行
可以通过ViewPager.PageTransformer
实现,在ViewPager
滑动fragments
时会回调。这是一个小例子
public class SimplePageTransformer implements ViewPager.PageTransformer {
public void transformPage(View view, float position) {
int pageWidth = view.getWidth();
if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
} else if (position <= 1) { // [-1,1]
} else { // (1,+Infinity]
// This page is way off-screen to the right
}
}
}
你可以从这个link中找到一个detail example。