Android实现TextView动画缩放
时间: 2024-05-14 10:18:35 浏览: 10
可以通过使用`ObjectAnimator`来实现TextView的动画缩放。下面是一个简单的示例代码:
```java
TextView textView = findViewById(R.id.text_view);
ObjectAnimator scaleAnim = ObjectAnimator.ofPropertyValuesHolder(
textView,
PropertyValuesHolder.ofFloat(View.SCALE_X, 1.0f, 1.5f),
PropertyValuesHolder.ofFloat(View.SCALE_Y, 1.0f, 1.5f)
);
scaleAnim.setDuration(1000);
scaleAnim.setRepeatCount(ValueAnimator.INFINITE);
scaleAnim.setRepeatMode(ValueAnimator.REVERSE);
scaleAnim.start();
```
以上代码实现了将TextView在X和Y方向上从1.0f缩放到1.5f的动画,动画时间为1秒,重复播放,且每次播放时反转动画方向。
你可以根据自己的需要调整动画的属性和参数。
相关问题
android翻书动画
Android翻书动画是一种视觉效果,可以模拟翻书的动作,使用户在阅读电子书或其他文本内容时获得更加真实的体验。它可以通过在Android应用程序中使用预先设计的动画库来实现。
实现步骤如下:
1. 导入动画库:在build.gradle文件中添加以下代码,以导入动画库。
dependencies {
implementation 'com.android.support:design:28.0.0'
}
2. 创建布局文件:在布局文件中添加一个RecyclerView,以显示书籍列表。然后,为每个书籍创建一个CardView,并在其中添加一个ImageView和一个TextView,以显示书籍的封面和标题。
3. 创建Adapter:创建一个RecyclerView.Adapter实现,用于显示书籍列表。
4. 创建动画:使用PageTransformer类创建翻书动画。PageTransformer允许您在滚动RecyclerView时对每个视图进行自定义转换。在这个类中,您可以添加动画效果,例如旋转、缩放和位移。
5. 应用动画:将PageTransformer应用于RecyclerView,以在滚动时显示翻书动画效果。使用以下代码将PageTransformer应用于RecyclerView。
recyclerView.setPageTransformer(true, new FlipPageTransformer());
通过这些步骤,您可以在Android应用程序中实现翻书动画。这将提供更加真实的阅读体验,并使用户更容易浏览大量文本内容。
Android语言用实现广告页轮播、打造卡片切换、卡片缩放动画的代码
以下是Android语言实现广告页轮播、打造卡片切换、卡片缩放动画的代码示例:
1. 广告页轮播
```
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private List<ImageView> imageList;
private int[] imageIds = {R.drawable.ad1, R.drawable.ad2, R.drawable.ad3};
private List<View> dotList;
private int currentItem = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initDot();
viewPager.setAdapter(new MyPagerAdapter());
viewPager.setCurrentItem(Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % imageIds.length);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
int newPosition = position % imageList.size();
for (int i = 0; i < dotList.size(); i++) {
if (i == newPosition) {
dotList.get(i).setBackgroundResource(R.drawable.dot_selected);
} else {
dotList.get(i).setBackgroundResource(R.drawable.dot_normal);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
currentItem++;
runOnUiThread(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
}
});
}
}
}).start();
}
private void initView() {
viewPager = findViewById(R.id.viewPager);
imageList = new ArrayList<>();
for (int i = 0; i < imageIds.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(imageIds[i]);
imageList.add(imageView);
}
}
private void initDot() {
LinearLayout dotLayout = findViewById(R.id.dotLayout);
dotList = new ArrayList<>();
for (int i = 0; i < imageIds.length; i++) {
View dotView = new View(this);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(20, 20);
layoutParams.leftMargin = 10;
layoutParams.rightMargin = 10;
dotView.setLayoutParams(layoutParams);
if (i == 0) {
dotView.setBackgroundResource(R.drawable.dot_selected);
} else {
dotView.setBackgroundResource(R.drawable.dot_normal);
}
dotLayout.addView(dotView);
dotList.add(dotView);
}
}
private class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = imageList.get(position % imageList.size());
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
}
```
2. 卡片切换
```
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private List<View> viewList;
private int[] imageIds = {R.drawable.card1, R.drawable.card2, R.drawable.card3};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
viewPager.setAdapter(new MyPagerAdapter());
viewPager.setPageTransformer(true, new ZoomOutPageTransformer());
}
private void initView() {
viewPager = findViewById(R.id.viewPager);
viewList = new ArrayList<>();
for (int i = 0; i < imageIds.length; i++) {
View view = LayoutInflater.from(this).inflate(R.layout.item_viewpager, null);
ImageView imageView = view.findViewById(R.id.imageView);
imageView.setImageResource(imageIds[i]);
viewList.add(view);
}
}
private class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
View view = viewList.get(position);
container.addView(view);
return view;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
private class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;
@Override
public void transformPage(@NonNull View page, float position) {
int pageWidth = page.getWidth();
int pageHeight = page.getHeight();
if (position < -1) {
page.setAlpha(0f);
} else if (position <= 1) {
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
page.setTranslationX(horzMargin - vertMargin / 2);
} else {
page.setTranslationX(-horzMargin + vertMargin / 2);
}
page.setScaleX(scaleFactor);
page.setScaleY(scaleFactor);
page.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else {
page.setAlpha(0f);
}
}
}
}
```
3. 卡片缩放动画
```
public class MainActivity extends AppCompatActivity {
private CardView cardView1, cardView2, cardView3;
private TextView textView1, textView2, textView3;
private boolean isCard1Expanded = false;
private boolean isCard2Expanded = false;
private boolean isCard3Expanded = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
}
private void initView() {
cardView1 = findViewById(R.id.cardView1);
cardView2 = findViewById(R.id.cardView2);
cardView3 = findViewById(R.id.cardView3);
textView1 = findViewById(R.id.textView1);
textView2 = findViewById(R.id.textView2);
textView3 = findViewById(R.id.textView3);
}
private void initListener() {
cardView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isCard1Expanded) {
isCard1Expanded = false;
textView1.setVisibility(View.GONE);
cardView1.animate().scaleX(1.0f).scaleY(1.0f).setDuration(500).start();
} else {
isCard1Expanded = true;
textView1.setVisibility(View.VISIBLE);
cardView1.animate().scaleX(1.2f).scaleY(1.2f).setDuration(500).start();
}
}
});
cardView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isCard2Expanded) {
isCard2Expanded = false;
textView2.setVisibility(View.GONE);
cardView2.animate().scaleX(1.0f).scaleY(1.0f).setDuration(500).start();
} else {
isCard2Expanded = true;
textView2.setVisibility(View.VISIBLE);
cardView2.animate().scaleX(1.2f).scaleY(1.2f).setDuration(500).start();
}
}
});
cardView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isCard3Expanded) {
isCard3Expanded = false;
textView3.setVisibility(View.GONE);
cardView3.animate().scaleX(1.0f).scaleY(1.0f).setDuration(500).start();
} else {
isCard3Expanded = true;
textView3.setVisibility(View.VISIBLE);
cardView3.animate().scaleX(1.2f).scaleY(1.2f).setDuration(500).start();
}
}
});
}
}
```