Android 动画中的ListView淡出
我对ListView动画有一些问题:如何在ListView中实现元素的“淡出”动画?我只需要在屏幕上有六个元素和这样的动画,就像在图片上一样 我只制作了一个“淡入”动画,但这并不完全是我所需要的Android 动画中的ListView淡出,android,listview,animation,Android,Listview,Animation,我对ListView动画有一些问题:如何在ListView中实现元素的“淡出”动画?我只需要在屏幕上有六个元素和这样的动画,就像在图片上一样 我只制作了一个“淡入”动画,但这并不完全是我所需要的 package com.example.testmalyutinoleksandr; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Timer; import java.util.Tim
package com.example.testmalyutinoleksandr;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listview;
private TextView textView;
private Context con;
private static final String LABELSKEY = "myListLabels";
private static final String COUNTERSKEY = "myListCounters";
private String values [];
private int counters [];
private static Calendar currentDate;
private Timer timer;
static {
currentDate = GregorianCalendar.getInstance();
}
public void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Black_NoTitleBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
con = this;
listview = (ListView) findViewById(R.id.myListView);
textView = (TextView) findViewById(R.id.timeTextView);
if (savedInstanceState != null && savedInstanceState.containsKey(LABELSKEY))
{
values = savedInstanceState.getStringArray(LABELSKEY);
counters = savedInstanceState.getIntArray(COUNTERSKEY);
}
else
{
values = DataLoader.getTitles(getApplication());
counters = new int [] {0,0,0,0,0,0,0,0,0,0};
}
SimpleListAdapter adapter = new SimpleListAdapter(this, values, counters);
listview.setAdapter(adapter);
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
currentDate = GregorianCalendar.getInstance();
int hour = currentDate.get(Calendar.HOUR_OF_DAY);
int minutes = currentDate.get(Calendar.MINUTE);
int seconds = currentDate.get(Calendar.SECOND);
textView.setText( hour + ":" + (minutes<10?"0":"") + minutes + ":" + (seconds<10?"0":"") + seconds);
}
}
);
}
} , 1, 1*1000);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TextView counterTextView = (TextView) view.findViewById(R.id.counterTextView);
int counter = Integer.valueOf(counterTextView.getText().toString());
counter++;
counterTextView.setText(counter + "");
MainActivity.this.counters[position] = counter;
Toast.makeText(getApplication(), "Нажата кнопка " + (position+1), Toast.LENGTH_SHORT).show();
}
});
listview.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
final int position, long id) {
AlertDialog.Builder alert = new AlertDialog.Builder(con);
alert.setTitle("Title");
alert.setMessage("Message");
final EditText input = new EditText(con);
input.setText("");
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// the adapter you set in the listView.setAdapter();
values[position] = input.getText().toString();
SimpleListAdapter adapter = new SimpleListAdapter(con, values, counters);
listview.setAdapter(adapter);
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
return true;
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putStringArray(LABELSKEY, values);
outState.putIntArray(COUNTERSKEY, counters);
}
}
package com.example.testmalyutinoleksandr;
导入java.util.Calendar;
导入java.util.GregorianCalendar;
导入java.util.Timer;
导入java.util.TimerTask;
导入android.app.Activity;
导入android.app.AlertDialog;
导入android.content.Context;
导入android.content.DialogInterface;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.AdapterView.OnItemClickListener;
导入android.widget.AdapterView.OnItemLongClickListener;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.TextView;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
私有列表视图列表视图;
私有文本视图文本视图;
私人语境;
私有静态最终字符串LABELSKEY=“myListLabels”;
私有静态最终字符串COUNTERSKEY=“myListCounters”;
私有字符串值[];
专用整数计数器[];
私有静态日历当前日期;
私人定时器;
静止的{
currentDate=GregorianCalendar.getInstance();
}
创建时的公共void(Bundle savedInstanceState){
setTheme(android.R.style.Theme\u Black\u NoTitleBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
con=这个;
listview=(listview)findViewById(R.id.myListView);
textView=(textView)findViewById(R.id.timeTextView);
if(savedInstanceState!=null&&savedInstanceState.containsKey(LABELSKEY))
{
values=savedInstanceState.getStringArray(LabelKey);
计数器=savedInstanceState.getIntArray(计数器键);
}
其他的
{
values=DataLoader.getTitles(getApplication());
计数器=新的int[]{0,0,0,0,0,0,0,0};
}
SimpleListAdapter=新的SimpleListAdapter(此、值、计数器);
setAdapter(适配器);
定时器=新定时器();
timer.scheduleAtFixedRate(新TimerTask(){
@凌驾
公开募捐{
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
currentDate=GregorianCalendar.getInstance();
int hour=currentDate.get(Calendar.hour/OF天);
int minutes=currentDate.get(Calendar.minutes);
int seconds=currentDate.get(Calendar.SECOND);
textView.setText(小时+”:“+(分钟父级,视图,
内部位置,长id){
//TODO自动生成的方法存根
TextView counterTextView=(TextView)view.findViewById(R.id.counterTextView);
int counter=Integer.valueOf(counterTextView.getText().toString());
计数器++;
counterTextView.setText(计数器+“”);
MainActivity.this.counters[位置]=计数器;
Toast.makeText(getApplication(),“аааааааааааааааа107;
}
});
setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView父视图、视图、,
最终整数位置,长id){
AlertDialog.Builder alert=新建AlertDialog.Builder(con);
警报。设置标题(“标题”);
警报。设置消息(“消息”);
最终编辑文本输入=新编辑文本(con);
input.setText(“”);
alert.setView(输入);
alert.setPositiveButton(“确定”,新的DialogInterface.OnClickListener(){
public void onClick(对话框接口对话框,int whichButton){
//在listView.setAdapter()中设置的适配器;
值[position]=input.getText().toString();
SimpleListAdapter=新的SimpleListAdapter(con、值、计数器);
setAdapter(适配器);
}
});
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(对话框接口对话框,int whichButton){
//取消了。
}
});
alert.show();
返回true;
}
});
setOnScrollListener(新的OnScrollListener(){
@凌驾
公共无效onScrollStateChanged(AbsListView视图,int scrollState){
//TODO自动生成的方法存根
int pos=view.getFirstVisiblePosition();
ScaleAnimation ScaleAnimation=新的ScaleAnimation(MainActivity.prevX,(float)(MainActivity.prevX+0.001),MainActivity.prevX,(float)(MainActivity.prevX+0.001),300100);
scaleAnimation.setDuration(1);
Log.d(“myLogs”,“Params:+MainActivity.prevX”);
View firstView=View.getChildAt(0);
firstView.setAnimation(缩放动画);
firstView.startAnimation(scaleAnimation);
firstView.invalidate();
//}
}
@凌驾
public void onScroll(AbsListView视图,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
//TODO自动生成的方法存根
MainActivity.this.view=视图;
MainActivity.this.visibleItemCount=visibleItemCount;
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
int[]位置={-1,-1};
MainActivity.this.view.getLocationOnScreen(位置);
如果(位置[0]!=0和位置[1]!=0){
if(MainActivity.this.visibleItemCount==6){
F
package com.example.testmalyutinoleksandr;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class SimpleListAdapter extends ArrayAdapter<String> {
private final Context context;
private final String[] values;
private final int[] counters;
private ArrayList<Drawable> icons;
private ArrayList<Drawable> bcgnd;
public SimpleListAdapter(Context context, String[] values, int [] counters1) {
super(context, R.layout.one_item, values);
this.context = context;
this.values = values;
this.counters = counters1;
this.icons = DataLoader.getIconsRandomly(context);
this.bcgnd = DataLoader.getBackgrounds(context);
}
static class ViewHolder {
public ImageView iconImageView;
public TextView titleTextView;
public TextView counterTextView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View rowView = convertView;
if(rowView == null){
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
rowView = inflater.inflate(R.layout.one_item, parent, false);
holder = new ViewHolder();
holder.iconImageView = (ImageView) rowView.findViewById(R.id.iconImageView);
holder.titleTextView = (TextView) rowView.findViewById(R.id.titleTextView);
holder.counterTextView = (TextView) rowView.findViewById(R.id.counterTextView);
rowView.setTag(holder);
}else{
holder = (ViewHolder) rowView.getTag();
}
holder.iconImageView.setImageDrawable(icons.get(position));
rowView.setBackgroundDrawable(bcgnd.get(position));
holder.titleTextView.setText(values[position]);
holder.counterTextView.setText(counters[position] + "");
Animation animation = null;
animation = AnimationUtils.loadAnimation(context, R.anim.test_set);
animation.setDuration(500);
rowView.startAnimation(animation);
animation = null;
return rowView;
}
}
package com.example.testmalyutinoleksandr;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ListView listview;
private TextView textView;
private Context con;
private static final String LABELSKEY = "myListLabels";
private static final String COUNTERSKEY = "myListCounters";
private String values [];
private int counters [];
private static Calendar currentDate;
private Timer timer;
SimpleListAdapter adapter;
private static volatile float prevX= 1;
//private static int prevY = 1;
private static volatile int width;
private static volatile int height;
private static volatile boolean flag = true;
AbsListView view;
int visibleItemCount;
static {
currentDate = GregorianCalendar.getInstance();
}
public void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Black_NoTitleBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
con = this;
listview = (ListView) findViewById(R.id.myListView);
textView = (TextView) findViewById(R.id.timeTextView);
if (savedInstanceState != null && savedInstanceState.containsKey(LABELSKEY))
{
values = savedInstanceState.getStringArray(LABELSKEY);
counters = savedInstanceState.getIntArray(COUNTERSKEY);
}
else
{
values = DataLoader.getTitles(getApplication());
counters = new int [] {0,0,0,0,0,0,0,0,0,0};
}
adapter = new SimpleListAdapter(this, values, counters);
listview.setAdapter(adapter);
Log.d("myLogs", "onCreate run");
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
currentDate = GregorianCalendar.getInstance();
int hour = currentDate.get(Calendar.HOUR_OF_DAY);
int minutes = currentDate.get(Calendar.MINUTE);
int seconds = currentDate.get(Calendar.SECOND);
textView.setText( hour + ":" + (minutes<10?"0":"") + minutes + ":" + (seconds<10?"0":"") + seconds);
}
}
);
}
} , 1, 1*1000);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
TextView counterTextView = (TextView) view.findViewById(R.id.counterTextView);
int counter = Integer.valueOf(counterTextView.getText().toString());
counter++;
counterTextView.setText(counter + "");
MainActivity.this.counters[position] = counter;
Toast.makeText(getApplication(), "Нажата кнопка " + (position+1), Toast.LENGTH_SHORT).show();
}
});
listview.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
final int position, long id) {
AlertDialog.Builder alert = new AlertDialog.Builder(con);
alert.setTitle("Title");
alert.setMessage("Message");
final EditText input = new EditText(con);
input.setText("");
alert.setView(input);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// the adapter you set in the listView.setAdapter();
values[position] = input.getText().toString();
SimpleListAdapter adapter = new SimpleListAdapter(con, values, counters);
listview.setAdapter(adapter);
}
});
alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
// Canceled.
}
});
alert.show();
return true;
}
});
listview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
int pos = view.getFirstVisiblePosition();
ScaleAnimation scaleAnimation = new ScaleAnimation(MainActivity.prevX, (float)(MainActivity.prevX+0.001), MainActivity.prevX, (float)(MainActivity.prevX+0.001), 300, 100);
scaleAnimation.setDuration(1);
Log.d("myLogs", "Params: " + MainActivity.prevX);
View firstView = view.getChildAt(0);
firstView.setAnimation(scaleAnimation);
firstView.startAnimation(scaleAnimation);
firstView.invalidate();
//}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
MainActivity.this.view = view;
MainActivity.this.visibleItemCount = visibleItemCount;
runOnUiThread(new Runnable() {
@Override
public void run() {
int [] location = {-1,-1};
MainActivity.this.view.getLocationOnScreen(location);
if(location[0] != 0 && location[1] != 0){
if(MainActivity.this.visibleItemCount == 6){
for(int i=0; i<MainActivity.this.visibleItemCount; i++){
View middleWantedView = listview.getChildAt(i);
if(MainActivity.flag){
MainActivity.height = middleWantedView.getHeight();
MainActivity.width = middleWantedView.getWidth();
MainActivity.flag = false;
}
middleWantedView.setScaleX(1);
middleWantedView.setScaleY(1);
}
}
if(MainActivity.this.visibleItemCount == 7){
View wantedView = listview.getChildAt(0);
wantedView.getLocationOnScreen(location);
float scaling = (float) (((float)location[1] - 150.0)/100.0);
Log.d("myLogs", "Scalling:" + scaling);
if(MainActivity.prevX == scaling)
scaling = (float) (scaling + 0.001);
ScaleAnimation scaleAnimation = new ScaleAnimation(MainActivity.prevX, scaling, MainActivity.prevX, scaling, 300, 100);
scaleAnimation.setDuration(1);
wantedView.setAnimation(scaleAnimation);
wantedView.startAnimation(scaleAnimation);
View secondWantedView = listview.getChildAt(MainActivity.this.visibleItemCount-1);
float scaling2 = (float) (1.0 - scaling);
int padding = (-1) * (250 - location[1]);
padding = (int) (padding - (padding * 0.5));
Log.d("myLogs", "Padding:" + padding);
scaleAnimation = new ScaleAnimation((float) (1.0 - MainActivity.prevX), scaling2, (float) (1.0 -MainActivity.prevX), scaling2, 300, padding);
secondWantedView.setAnimation(scaleAnimation);
secondWantedView.startAnimation(scaleAnimation);
MainActivity.prevX = scaling;
secondWantedView.setScaleX(scaling2);
secondWantedView.setScaleY(scaling2);
}
}
}});
}});
};
@Override
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putStringArray(LABELSKEY, values);
outState.putIntArray(COUNTERSKEY, counters);
}
}`
View row = findViewById(R.id.myrow);
if(row.getVisibility() == View.VISIBLE) {
row.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
row.setVisibility(View.INVISIBLE);
} else {
row.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
row.setVisibility(View.VISIBLE);
}